Collaborators: Shane Blowes, Jon Chase, Helmut Hillebrand, Michael Burrows, Amanda Bates, Uli Brose, Benoit Gauzens, Laura Antao Assistance: Katherine Lew, Josef Hauser

Introduction

Methods

library(data.table) # for handling large datasets
library(ggplot2) # for some plotting
library(nlme) # for ME models
library(maps) # for map
library(gridExtra) # to combine ggplots together
library(grid) # to combine ggplots together
library(RColorBrewer)

options(width=500) # turn off most text wrapping

# tell RStudio to use project root directory as the root for this notebook. Needed since we are storing code in a separate directory.
knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file()) 
# Turnover and covariates assembled by turnover_vs_temperature_prep.Rmd
trends <- fread('output/turnover_w_covariates.csv.gz')

# set realm order
trends[, REALM := factor(REALM, levels = c('Freshwater', 'Marine', 'Terrestrial'), ordered = FALSE)]

# set up sign of temperature change
trends[, tsign := factor(sign(temptrend))]

# realm that combined Terrestrial and Freshwater, for interacting with human impact
trends[, REALM2 := REALM]
levels(trends$REALM2) = list(TerrFresh = "Freshwater", TerrFresh = "Terrestrial", Marine = "Marine")

# group Marine invertebrates/plants in with All
trends[, taxa_mod2 := taxa_mod]
trends[taxa_mod == 'Marine invertebrates/plants', taxa_mod2 := 'All']

Log-transform some variables, then center and scale.

trends[, tempave.sc := scale(tempave)]
trends[, tempave_metab.sc := scale(tempave_metab)]
trends[, seas.sc := scale(seas)]
trends[, microclim.sc := scale(log(microclim))]
trends[, temptrend.sc := scale(temptrend, center = FALSE)]
trends[, temptrend_abs.sc := scale(abs(temptrend), center = FALSE)] # do not center, so that 0 is still 0 temperature change
trends[, mass.sc := scale(log(mass_mean_weight))]
trends[, speed.sc := scale(log(speed_mean_weight+1))]
trends[, lifespan.sc := scale(log(lifespan_mean_weight))]
trends[, consumerfrac.sc := scale(consfrac)]
trends[, endothermfrac.sc := scale(endofrac)]
trends[, nspp.sc := scale(log(Nspp))]
trends[, thermal_bias.sc := scale(thermal_bias)]
trends[, npp.sc := scale(log(npp))]
trends[, veg.sc := scale(log(veg+1))]
trends[, human_bowler.sc := scale(log(human_bowler+1)), by = REALM2] # separate scaling by realm
trends[REALM2 == 'TerrFresh', human_footprint.sc := scale(log(human_venter+1))]
trends[REALM2 == 'Marine', human_footprint.sc := scale(log(human_halpern))]

Examine how many data points are available

Just turnover

cat('Overall # time-series: ', nrow(trends), '\n')
Overall # time-series:  53013 
cat('# studies: ', trends[, length(unique(STUDY_ID))], '\n')
# studies:  332 
cat('Data points: ', trends[, sum(nyrBT)], '\n')
Data points:  293973 
trends[, table(REALM)]
REALM
 Freshwater      Marine Terrestrial 
       1025       48647        3341 
trends[, table(taxa_mod)]
taxa_mod
                        All                  Amphibians                     Benthos 
                       1705                         379                        4679 
                      Birds                        Fish               Invertebrates 
                      13741                       28473                        2996 
                    Mammals Marine invertebrates/plants                       Plant 
                        525                         206                         305 
                   Reptiles 
                          4 
trends[, table(taxa_mod, REALM)]
                             REALM
taxa_mod                      Freshwater Marine Terrestrial
  All                                  0   1702           3
  Amphibians                           2      0         377
  Benthos                              0   4679           0
  Birds                                0  11099        2642
  Fish                              1006  27467           0
  Invertebrates                       15   2901          80
  Mammals                              0    478          47
  Marine invertebrates/plants          0    206           0
  Plant                                1    115         189
  Reptiles                             1      0           3

With all covariates (Bowler for human)

# the cases we can compare
apply(trends[, .(Jtutrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, temptrend.sc, mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)], MARGIN = 2, FUN = function(x) sum(!is.na(x)))
        Jtutrend            REALM       tempave.sc tempave_metab.sc          seas.sc 
           53013            53013            49916            49916            49916 
    microclim.sc     temptrend.sc          mass.sc         speed.sc      lifespan.sc 
           51834            49916            52820            52734            51540 
 consumerfrac.sc endothermfrac.sc          nspp.sc  thermal_bias.sc           npp.sc 
           47534            53013            53013            49371            52863 
          veg.sc  human_bowler.sc 
           52890            53013 
i <- trends[, complete.cases(Jtutrend, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, temptrend.sc, mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]
cat('Overall # time-series: ', sum(i), '\n')
Overall # time-series:  43493 
cat('# studies: ', trends[i, length(unique(STUDY_ID))], '\n')
# studies:  235 
cat('Data points: ', trends[i, sum(nyrBT)], '\n')
Data points:  221956 
trends[i, table(REALM)]
REALM
 Freshwater      Marine Terrestrial 
        978       39738        2777 
trends[i, table(taxa_mod)]
taxa_mod
          All    Amphibians       Benthos         Birds          Fish Invertebrates       Mammals 
          521            12           590         11753         27345          2559           515 
        Plant      Reptiles 
          196             2 
trends[i, table(taxa_mod, REALM)]
               REALM
taxa_mod        Freshwater Marine Terrestrial
  All                    0    520           1
  Amphibians             2      0          10
  Benthos                0    590           0
  Birds                  0   9221        2532
  Fish                 966  26379           0
  Invertebrates          9   2484          66
  Mammals                0    477          38
  Plant                  1     67         128
  Reptiles               0      0           2

Choose the variance structure for mixed effects models

Try combinations of

  • variance scaled to a power of the number of years in the community time-series
  • variance scaled to a power of the abs temperature trend
  • random intercept for taxa_mod
  • random intercept for STUDY_ID
  • random slope (abs temperature trend) for taxa_mod
  • random slope (abs temperature trend) for STUDY_ID
  • random intercept for rarefyID (for overdispersion)

And choose the one with lowest AIC (not run: takes a long time)

# fit models for variance structure
fixed <- formula(Jtutrend ~ REALM + tempave_metab.sc + seas.sc + microclim.sc + npp.sc + temptrend_abs.sc +
                     mass.sc + speed.sc + lifespan.sc + consumerfrac.sc + thermal_bias.sc)
i <- trends[, complete.cases(Jtutrend, REALM, tempave_metab.sc, seas.sc, microclim.sc, npp.sc, temptrend_abs.sc,
                             mass.sc, speed.sc, lifespan.sc, consumerfrac.sc, thermal_bias.sc)]
mods <- vector('list', 0)
mods[[1]] <- gls(fixed, data = trends[i,])
mods[[2]] <- gls(fixed, data = trends[i,], weights = varPower(-0.5, ~nyrBT))
mods[[3]] <- gls(fixed, data = trends[i,], weights = varPower(0.5, ~ abs(temptrend)))

mods[[4]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, control = lmeControl(opt = "optim"))
mods[[5]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, control = lmeControl(opt = "optim"))
mods[[6]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID, control = lmeControl(opt = "optim"))
mods[[7]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, control = lmeControl(opt = "optim"))
mods[[8]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, control = lmeControl(opt = "optim"))

mods[[9]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | taxa_mod)
mods[[10]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | STUDY_ID)
mods[[11]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc | taxa_mod2/STUDY_ID, control = lmeControl(opt = "optim"))
mods[[12]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)) # includes overdispersion. new formula so that random slope is only for study level (not enough data to extend to rarefyID).
mods[[13]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)) # 30+ min to fit

mods[[14]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, weights = varPower(-0.5, ~nyrBT))
mods[[15]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, weights = varPower(-0.5, ~nyrBT))
mods[[16]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID, weights = varPower(-0.5, ~nyrBT))
mods[[17]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, weights = varPower(-0.5, ~nyrBT))
mods[[18]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, weights = varPower(-0.5, ~nyrBT))
mods[[19]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc|STUDY_ID, weights = varPower(-0.5, ~nyrBT))
mods[[20]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT))
mods[[21]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ 1), weights = varPower(-0.5, ~nyrBT))
mods[[22]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ 1, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT))
mods[[23]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc), weights = varPower(-0.5, ~nyrBT)) # singular precision warning with lmeControl(opt = 'optim') and convergence error without
mods[[24]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~nyrBT)) # singular precision warning with lmeControl(opt = 'optim') and convergence error without

mods[[25]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2, weights = varPower(-0.5, ~abs(temptrend)))
mods[[26]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[27]] <- lme(fixed, data = trends[i,], random = ~1|STUDY_ID/rarefyID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[28]] <- lme(fixed, data = trends[i,], random = ~1|taxa_mod2/STUDY_ID/rarefyID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[29]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc|STUDY_ID, weights = varPower(-0.5, ~abs(temptrend)))
mods[[30]] <- lme(fixed, data = trends[i,], random = ~temptrend_abs.sc|taxa_mod2/STUDY_ID, weights = varPower(-0.5, ~abs(temptrend)), control = lmeControl(opt = "optim"))
mods[[31]] <- lme(fixed, data = trends[i,], random = list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~abs(temptrend)))
mods[[32]] <- lme(fixed, data = trends[i,], random = list(taxa_mod2 = ~ temptrend_abs.sc, STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1), weights = varPower(-0.5, ~abs(temptrend)), control = lmeControl(opt = "optim")) # singular precision warning

aics <- sapply(mods, AIC)
minaics <- aics - min(aics)
minaics
which.min(aics)

Chooses the random slopes (temptrend_abs) & intercepts for STUDY_ID, overdispersion, and variance scaled to number of years. We haven’t dealt with potential testing on the boundary issues here yet.

Results

Where do we have data?

world <- map_data('world')
ggplot(world, aes(x = long, y = lat, group = group)) +
    geom_polygon(fill = 'lightgray', color = 'white') +
    geom_point(data = trends, aes(rarefyID_x, rarefyID_y, group = REALM, color = REALM), size = 0.5, alpha = 0.4)  +
    scale_color_brewer(palette="Set1", name = 'Realm') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=16),
        axis.title=element_text(size=20)) +
  labs(x = 'Longitude (°)', y = 'Latitude (°)')

Mostly northern hemisphere, but spread all over. No so much in Africa or much of Asia.

Average rates of turnover (with year 1)

trends[abs(temptrend) >= 0.5, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # turnover per year for locations changing temperature
trends[abs(temptrend) < 0.1, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # not changing temperature
trends[temptrend >= 0.5, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # warming
trends[temptrend <= -0.5, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # cooling

trends[abs(temptrend) >= 0.5 & abs(rarefyID_y) < 35, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # tropics and sub-tropics
trends[abs(temptrend) >= 0.5 & abs(rarefyID_y) >= 35 & abs(rarefyID_y) < 66.56339, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # temperate
trends[abs(temptrend) >= 0.5 & abs(rarefyID_y) >= 66.56339, .(ave = mean(Jtutrend), sd = sd(Jtutrend)/sqrt(.N))] # arctic

Average rates of turnover (without year 1)

trends[abs(temptrend) >= 0.5, .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
                                sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # turnover per year for locations changing temperature
trends[abs(temptrend) < 0.1, .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
                               sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # not changing temperature
trends[temptrend >= 0.5, .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
                           sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # warming
trends[temptrend <= -0.5, .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
                            sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # cooling

trends[abs(temptrend) >= 0.5 & abs(rarefyID_y) < 35, 
       .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
         sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # tropics and sub-tropics
trends[abs(temptrend) >= 0.5 & abs(rarefyID_y) >= 35 & abs(rarefyID_y) < 66.56339, 
       .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
         sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # temperate
trends[abs(temptrend) >= 0.5 & abs(rarefyID_y) >= 66.56339, 
       .(ave = mean(Jtutrendrem0, na.rm=TRUE), 
         sd = sd(Jtutrendrem0, na.rm=TRUE)/sqrt(.N))] # arctic

Temperature-only model (Jtutrend, Jbetatrend, Horntrend)

With year 1

i <- trends[, complete.cases(Jtutrend, REALM, temptrend)]

randef <- list(STUDY_ID = ~ abs(temptrend), rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modonlyTtrend.rds')){
  modonlyTtrend <- readRDS('temp/modonlyTtrend.rds')
} else {
  modonlyTtrend <- lme(Jtutrend ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i,], method = 'REML')
  saveRDS(modonlyTtrend, file = 'temp/modonlyTtrend.rds')
}

i2 <- trends[, complete.cases(Jbetatrend, REALM, temptrend)]
if(file.exists('temp/modonlyTtrendJbeta.rds')){
  modonlyTtrendJbeta <- readRDS('temp/modonlyTtrendJbeta.rds')
} else {
  modonlyTtrendJbeta <- lme(Jbetatrend ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i2,], method = 'REML', 
                   control=lmeControl(msMaxIter = 100, maxIter = 100))
  saveRDS(modonlyTtrendJbeta, file = 'temp/modonlyTtrendJbeta.rds')
}

i3 <- trends[, complete.cases(Horntrend, REALM, temptrend)]
if(file.exists('temp/modonlyTtrendHorn.rds')){
  modonlyTtrendHorn <- readRDS('temp/modonlyTtrendHorn.rds')
} else {
  modonlyTtrendHorn <- lme(Horntrend ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i3,], method = 'REML')
  saveRDS(modonlyTtrendHorn, file = 'temp/modonlyTtrendHorn.rds')
}

summary(modonlyTtrend)
Linear mixed-effects model fit by REML
 Data: trends[i, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev     Corr  
(Intercept)    0.04375688 (Intr)
abs(temptrend) 0.29351811 -0.123

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.001792571 0.2893301

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.223838 
Fixed effects: Jtutrend ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.424                                
REALMMarine                     -0.934  0.396                         
REALMTerrestrial                -0.923  0.391  0.862                  
abs(temptrend):REALMMarine       0.407 -0.960 -0.407 -0.375           
abs(temptrend):REALMTerrestrial  0.387 -0.913 -0.362 -0.433  0.876    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.38476416 -0.29781039  0.08738927  0.54929160  6.52538535 

Number of Observations: 49916
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   317                  49916 
summary(modonlyTtrendJbeta)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev     Corr  
(Intercept)    0.05691594 (Intr)
abs(temptrend) 0.34739161 -0.16 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 1.28009e-06 0.3525846

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.394679 
Fixed effects: Jbetatrend ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.428                                
REALMMarine                     -0.933  0.399                         
REALMTerrestrial                -0.926  0.396  0.864                  
abs(temptrend):REALMMarine       0.411 -0.961 -0.411 -0.380           
abs(temptrend):REALMTerrestrial  0.390 -0.913 -0.364 -0.437  0.877    

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-7.3578768 -0.1587203  0.2033006  0.6705745  6.5270460 

Number of Observations: 49916
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   317                  49916 
summary(modonlyTtrendHorn)
Linear mixed-effects model fit by REML
 Data: trends[i3, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev    Corr  
(Intercept)    0.0549979 (Intr)
abs(temptrend) 0.3228314 -0.095

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.007989212 0.3034899

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.217439 
Fixed effects: Horntrend ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.399                                
REALMMarine                     -0.921  0.368                         
REALMTerrestrial                -0.919  0.367  0.847                  
abs(temptrend):REALMMarine       0.381 -0.954 -0.378 -0.350           
abs(temptrend):REALMTerrestrial  0.363 -0.908 -0.334 -0.408  0.867    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-6.21250285 -0.32193926  0.06521414  0.53688251  6.03752738 

Number of Observations: 48800
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   276                  48800 

Without year 1

i4 <- trends[, complete.cases(Jtutrendrem0, REALM, temptrend)]

randef <- list(STUDY_ID = ~ abs(temptrend), rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modonlyTtrendrem0.rds')){
  modonlyTtrendrem0 <- readRDS('temp/modonlyTtrendrem0.rds')
} else {
  modonlyTtrendrem0 <- lme(Jtutrendrem0 ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i4,], method = 'REML')
  saveRDS(modonlyTtrendrem0, file = 'temp/modonlyTtrendrem0.rds')
}

i5 <- trends[, complete.cases(Jbetatrendrem0, REALM, temptrend)]
if(file.exists('temp/modonlyTtrendJbetarem0.rds')){
  modonlyTtrendJbetarem0 <- readRDS('temp/modonlyTtrendJbetarem0.rds')
} else {
  modonlyTtrendJbetarem0 <- lme(Jbetatrendrem0 ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i5,], method = 'REML', 
                   control=lmeControl(msMaxIter = 100, maxIter = 100))
  saveRDS(modonlyTtrendJbetarem0, file = 'temp/modonlyTtrendJbetarem0.rds')
}

i6 <- trends[, complete.cases(Horntrendrem0, REALM, temptrend)]
if(file.exists('temp/modonlyTtrendHornrem0.rds')){
  modonlyTtrendHornrem0 <- readRDS('temp/modonlyTtrendHornrem0.rds')
} else {
  modonlyTtrendHornrem0 <- lme(Horntrendrem0 ~ abs(temptrend)*REALM,
                   random = randef, weights = varef, data = trends[i6,], method = 'REML')
  saveRDS(modonlyTtrendHornrem0, file = 'temp/modonlyTtrendHornrem0.rds')
}

summary(modonlyTtrendrem0)
Linear mixed-effects model fit by REML
 Data: trends[i4, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev      Corr  
(Intercept)    0.007657053 (Intr)
abs(temptrend) 0.197650298 -0.935

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01097849 2.000161

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.121022 
Fixed effects: Jtutrendrem0 ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.807                                
REALMMarine                     -0.947  0.764                         
REALMTerrestrial                -0.901  0.727  0.853                  
abs(temptrend):REALMMarine       0.766 -0.949 -0.814 -0.690           
abs(temptrend):REALMTerrestrial  0.733 -0.908 -0.693 -0.810  0.862    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-6.57101792 -0.22892007 -0.01904447  0.27434430  5.64177564 

Number of Observations: 36747
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   292                  36747 
summary(modonlyTtrendJbetarem0)
Linear mixed-effects model fit by REML
 Data: trends[i5, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev      Corr  
(Intercept)    0.005965236 (Intr)
abs(temptrend) 0.160013131 -0.038

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.003861919 0.9688156

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.887978 
Fixed effects: Jbetatrendrem0 ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.543                                
REALMMarine                     -0.941  0.511                         
REALMTerrestrial                -0.906  0.492  0.852                  
abs(temptrend):REALMMarine       0.515 -0.948 -0.524 -0.467           
abs(temptrend):REALMTerrestrial  0.494 -0.908 -0.464 -0.542  0.861    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.57430409 -0.30896466 -0.02462766  0.32539894  8.23224466 

Number of Observations: 36747
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   292                  36747 
summary(modonlyTtrendHornrem0)
Linear mixed-effects model fit by REML
 Data: trends[i6, ] 

Random effects:
 Formula: ~abs(temptrend) | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
               StdDev     Corr  
(Intercept)    0.01201968 (Intr)
abs(temptrend) 0.25314398 0.016 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01882813 2.441788

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.318769 
Fixed effects: Horntrendrem0 ~ abs(temptrend) * REALM 
 Correlation: 
                                (Intr) abs(t) REALMM REALMT a():REALMM
abs(temptrend)                  -0.472                                
REALMMarine                     -0.944  0.446                         
REALMTerrestrial                -0.899  0.424  0.848                  
abs(temptrend):REALMMarine       0.447 -0.945 -0.455 -0.401           
abs(temptrend):REALMTerrestrial  0.428 -0.906 -0.404 -0.473  0.856    

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.75457482 -0.22483445 -0.02254226  0.23615730  5.73488343 

Number of Observations: 36005
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   257                  36005 

Plot the temp-only coefficients

colors <- brewer.pal(6, 'Dark2')

# make table of coefficients
coefs <- as.data.frame(summary(modonlyTtrend)$tTable)
coefs2 <- as.data.frame(summary(modonlyTtrendJbeta)$tTable)
coefs3 <- as.data.frame(summary(modonlyTtrendHorn)$tTable)
coefs4 <- as.data.frame(summary(modonlyTtrendrem0)$tTable)
coefs5 <- as.data.frame(summary(modonlyTtrendJbetarem0)$tTable)
coefs6 <- as.data.frame(summary(modonlyTtrendHornrem0)$tTable)
coefs$mod <- 'Jtu'
coefs2$mod <- 'Jbeta'
coefs3$mod <- 'Horn'
coefs4$mod <- 'Jturem0'
coefs5$mod <- 'Jbetarem0'
coefs6$mod <- 'Hornrem0'
rows1 <- which(grepl('temptrend', rownames(coefs))) # extract temperature effect
cols <- c('Value', 'Std.Error', 'mod')
allcoefs <- rbind(coefs[rows1, cols], coefs2[rows1, cols], coefs3[rows1, cols], 
                  coefs4[rows1, cols], coefs5[rows1, cols], coefs6[rows1, cols])
allcoefs$Value[grepl('REALMMarine', rownames(allcoefs))] <- 
  allcoefs$Value[grepl('REALMMarine', rownames(allcoefs))] + 
  allcoefs$Value[!grepl('REALM', rownames(allcoefs))] # add intercept to marine effects
allcoefs$Value[grepl('REALMTerrestrial', rownames(allcoefs))] <- 
  allcoefs$Value[grepl('REALMTerrestrial', rownames(allcoefs))] + 
  allcoefs$Value[!grepl('REALM', rownames(allcoefs))] # add intercept to terrestrial effects

allcoefs$lCI <- allcoefs$Value - allcoefs$Std.Error # lower confidence interval
allcoefs$uCI <- allcoefs$Value + allcoefs$Std.Error
allcoefs$y <- c(3, 2, 1) + rep(c(0, -0.1, -0.2, -0.3, -0.4, -0.5), c(3, 3, 3, 3, 3, 3)) # y-values
allcoefs$col <- c(rep(colors[1], 3), rep(colors[2], 3), rep(colors[3], 3), 
                  rep(colors[4], 3), rep(colors[5], 3), rep(colors[6], 3))
allcoefs$realm <- rep(c('Freshwater', 'Marine', 'Terrestrial'), 6)

par(las = 1, mai = c(0.8, 2, 0.1, 0.1))
plot(0,0, col = 'white', xlim=c(-0.1, 0.85), ylim = c(0.5,3), 
     yaxt='n', xlab = 'Turnover per |°C/yr|', ylab ='')
axis(2, at = 3:1, labels = c('Freshwater', 'Marine', 'Terrestrial'), cex.axis = 0.7)
abline(v = 0, col = 'grey')
for(i in 1:nrow(allcoefs)){
  with(allcoefs[i, ], points(Value, y, pch = 16, col = col))
  with(allcoefs[i, ], lines(x = c(lCI, uCI), y = c(y, y), col = col))
}
legend('bottomright', col = colors, lwd = 1, pch = 16, 
       legend = c('Jaccard turnover', 'Jaccard total', 'Horn-Morisita',
                  'Jaccard turnover rem0', 'Jaccard total rem0', 'Horn-Morisita rem0'))

Nicer plots of turnover vs. temperature data and model fit

Scatterplot, violin plots, and coefficient plots all together Off for now

# on macbook: fig.width=3, fig.height=2.375, fig.retina=3, out.width=3, out.height=2.375
# on external monitor: fig.width=6, fig.height=4.5
trends[temptrend <= -0.5, temptrendtext := 'Cooling']
trends[abs(temptrend) <= 0.1, temptrendtext := 'Stable']
trends[temptrend >= 0.5, temptrendtext := 'Warming']

trends[abs(rarefyID_y) < 35, latzone := 'Subtropics']
trends[abs(rarefyID_y) >= 35 & abs(rarefyID_x) < 66.56339, latzone := 'Temperate'] 
trends[abs(rarefyID_y) >= 66.56339, latzone := 'Polar']
trends[, latzone := factor(latzone, levels = c('Subtropics', 'Temperate', 'Polar'))]

p1 <- ggplot(trends, aes(temptrend, Jtutrend, color = REALM, fill = REALM, size = nyrBT)) +
  geom_point(na.rm = TRUE, shape = 16, alpha = 0.1) + 
  geom_smooth(data=subset(trends, abs(temptrend) < 0.75), method = 'gam', formula = y ~ s(x, bs = "cs"), 
              na.rm = TRUE) +
  scale_color_brewer(palette="Set1", name = 'Realm') + 
  scale_fill_brewer(palette="Set1", name = 'Realm') + 
  labs(x = 'Temperature trend (°C/yr)', y = 'Jaccard turnover', tag = 'A') +
  scale_size_continuous(range = c(1, 8), breaks = c(2, 5, 20)) +
  guides(size = guide_legend(title = 'Years',
                             override.aes = list(linetype=0, fill = NA, alpha = 1))) +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        legend.key.size = unit(0.5,"line"), 
        axis.text=element_text(size=8),
        axis.title=element_text(size=10))

p2 <- ggplot(trends[!is.na(temptrendtext), ], aes(temptrendtext, Jtutrend)) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75), fill = 'grey') +
  labs(x = '', y = 'Jaccard turnover', tag = 'B') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=8),
        axis.title=element_text(size=10))

p3 <- ggplot(trends[abs(temptrend) >= 0.5 & !is.na(latzone), ], aes(latzone, Jtutrend)) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75), fill = 'grey') + 
  labs(x = '', y = '', tag = 'C') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.key=element_blank(),
        axis.text=element_text(size=7),
        axis.title=element_text(size=10))

p4 <- ggplot(allcoefs, aes(Value, y, group = mod, color = mod)) +
  geom_errorbarh(aes(xmin = lCI, xmax = uCI, height = 0)) + 
  geom_point() + 
  labs(x = expression(atop('Temperature change effect', '(Turnover '~degree*'C'^'-1'*')')), y = '', tag = 'D') +
  scale_color_grey() + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.position='none',
        axis.text=element_text(size=7),
        axis.title=element_text(size=7)) + 
  coord_cartesian(xlim =c(0, 1)) +
  scale_y_continuous(name = '', breaks = c(1, 2, 3), labels = c('Terrestrial', 'Marine', 'Freshwater'))

grid.arrange(p1, p2, p3, p4, ncol = 3, layout_matrix = rbind(c(1,1,1), c(2,3,4)),
             heights=c(unit(0.66, "npc"), unit(0.34, "npc")))

Full models

Try static covariates plus interactions of abs temperature trend with each covariate:

  • realm
  • speed
  • mass
  • lifespan
  • average metabolic temperature
  • consumer fraction
  • endotherm fraction
  • environmental temperature
  • seasonality
  • microclimates
  • thermal bias
  • NPP
  • vegetation
  • human footprint

Except for thermal bias: interact with temperature trend (not abs)

Fit full models

Full model for Jaccard turnover

Try Bowler or Venter/Halpern human impact

# using Bowler for human impact
i <- trends[, complete.cases(Jtutrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modTfull1.rds')){
  modTfull1 <- readRDS('temp/modTfull1.rds')
} else {
  modTfull1 <- lme(Jtutrend ~ temptrend_abs.sc*REALM +
                     temptrend_abs.sc*tsign + 
                     temptrend_abs.sc*tempave.sc +
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*lifespan.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*endothermfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend_abs.sc*thermal_bias.sc:tsign +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*veg.sc +
                     temptrend_abs.sc*human_bowler.sc:REALM2,
                   random = randef, weights = varef, data = trends[i,], method = 'REML')
  saveRDS(modTfull1, file = 'temp/modTfull1.rds')
}

# using Venter/Halpern for human impact
i1.2 <- trends[, complete.cases(Jtutrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_footprint.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

if(file.exists('temp/modTfullfootprint.rds')){
  modTfullfootprint <- readRDS('temp/modTfullfootprint.rds')
} else {
  modTfullfootprint <- lme(Jtutrend ~ temptrend_abs.sc*REALM + 
                     temptrend_abs.sc*tsign + 
                     temptrend_abs.sc*tempave.sc +
                     temptrend_abs.sc*tempave_metab.sc + 
                     temptrend_abs.sc*seas.sc + 
                     temptrend_abs.sc*microclim.sc + 
                     temptrend_abs.sc*mass.sc + 
                     temptrend_abs.sc*speed.sc + 
                     temptrend_abs.sc*lifespan.sc + 
                     temptrend_abs.sc*consumerfrac.sc +
                     temptrend_abs.sc*endothermfrac.sc +
                     temptrend_abs.sc*nspp.sc +
                     temptrend_abs.sc*thermal_bias.sc:tsign +
                     temptrend_abs.sc*npp.sc +
                     temptrend_abs.sc*veg.sc +
                     temptrend_abs.sc*human_footprint.sc:REALM2,
                   random = randef, weights = varef, data = trends[i1.2,], method = 'REML')
  saveRDS(modTfullfootprint, file = 'temp/modTfullfootprint.rds')
}

summary(modTfull1)
Linear mixed-effects model fit by REML
 Data: trends[i, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.04686628 (Intr)
temptrend_abs.sc 0.03743575 -0.109

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.000833882 0.2868584

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.239456 
Fixed effects: Jtutrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tsign +      temptrend_abs.sc * tempave.sc + temptrend_abs.sc * tempave_metab.sc +      temptrend_abs.sc * seas.sc + temptrend_abs.sc * microclim.sc +      temptrend_abs.sc * mass.sc + temptrend_abs.sc * speed.sc +      temptrend_abs.sc * lifespan.sc + temptrend_abs.sc * consumerfrac.sc +      temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_. ses.sc
temptrend_abs.sc                                 -0.408                                                 
REALMMarine                                      -0.928  0.383                                          
REALMTerrestrial                                 -0.865  0.350  0.801                                   
tsign1                                           -0.037  0.022  0.009  0.012                            
tempave.sc                                       -0.003  0.001 -0.002 -0.002 -0.071                     
tempave_metab.sc                                  0.052 -0.023 -0.045 -0.041 -0.023 -0.469              
seas.sc                                          -0.045  0.042  0.063 -0.014 -0.109  0.183 -0.099       
microclim.sc                                     -0.016  0.022  0.025 -0.008  0.012 -0.042 -0.026  0.142
mass.sc                                           0.014  0.009 -0.001  0.001  0.020  0.026 -0.498  0.000
speed.sc                                          0.002 -0.005  0.013  0.021 -0.047  0.103 -0.279  0.100
lifespan.sc                                       0.032 -0.022 -0.027 -0.044 -0.015 -0.087  0.707  0.013
consumerfrac.sc                                  -0.017  0.009  0.030  0.272  0.017 -0.019 -0.038 -0.043
endothermfrac.sc                                  0.146 -0.050 -0.074 -0.308  0.008  0.142 -0.165  0.027
nspp.sc                                          -0.009 -0.017 -0.013 -0.027 -0.039  0.004 -0.015 -0.045
npp.sc                                            0.010  0.006 -0.014  0.014  0.014 -0.276  0.213 -0.147
veg.sc                                           -0.109  0.141  0.113  0.000 -0.016  0.145 -0.104  0.130
temptrend_abs.sc:REALMMarine                      0.392 -0.960 -0.394 -0.330 -0.005 -0.001  0.019 -0.055
temptrend_abs.sc:REALMTerrestrial                 0.340 -0.843 -0.314 -0.415 -0.005 -0.012  0.022  0.038
temptrend_abs.sc:tsign1                           0.019 -0.046 -0.007 -0.005 -0.486  0.044  0.000  0.014
temptrend_abs.sc:tempave.sc                       0.003 -0.009 -0.006 -0.004  0.048 -0.595  0.309 -0.054
temptrend_abs.sc:tempave_metab.sc                -0.014  0.027  0.013  0.014 -0.011  0.326 -0.582 -0.010
temptrend_abs.sc:seas.sc                          0.021 -0.061 -0.029  0.029  0.043 -0.010 -0.005 -0.618
temptrend_abs.sc:microclim.sc                     0.009 -0.030 -0.012  0.010 -0.040  0.075 -0.012 -0.065
temptrend_abs.sc:mass.sc                          0.007 -0.015 -0.009 -0.010 -0.014  0.024  0.265  0.007
temptrend_abs.sc:speed.sc                        -0.005  0.020 -0.004 -0.002  0.024 -0.087  0.129 -0.032
                                                 mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s npp.sc
temptrend_abs.sc                                                                                        
REALMMarine                                                                                             
REALMTerrestrial                                                                                        
tsign1                                                                                                  
tempave.sc                                                                                              
tempave_metab.sc                                                                                        
seas.sc                                                                                                 
microclim.sc                                                                                            
mass.sc                                           0.034                                                 
speed.sc                                          0.068  0.140                                          
lifespan.sc                                      -0.009 -0.774 -0.454                                   
consumerfrac.sc                                  -0.007  0.015 -0.070 -0.047                            
endothermfrac.sc                                  0.011 -0.014 -0.169  0.067 -0.331                     
nspp.sc                                          -0.099 -0.214  0.007  0.145 -0.002  0.085              
npp.sc                                           -0.157 -0.041  0.047  0.033 -0.028 -0.083 -0.180       
veg.sc                                            0.001  0.033  0.046 -0.026 -0.049  0.007  0.004 -0.283
temptrend_abs.sc:REALMMarine                     -0.026 -0.014 -0.007  0.017 -0.010  0.033  0.026  0.011
temptrend_abs.sc:REALMTerrestrial                 0.015 -0.014 -0.007  0.027 -0.101  0.134  0.042 -0.028
temptrend_abs.sc:tsign1                          -0.037 -0.013  0.017  0.007 -0.006  0.004  0.026 -0.049
temptrend_abs.sc:tempave.sc                       0.078  0.024 -0.059  0.029 -0.013 -0.109 -0.016  0.153
temptrend_abs.sc:tempave_metab.sc                -0.029  0.250  0.078 -0.346  0.058  0.134 -0.009 -0.139
temptrend_abs.sc:seas.sc                         -0.092  0.008 -0.035 -0.008  0.031  0.011  0.030  0.081
temptrend_abs.sc:microclim.sc                    -0.673 -0.015 -0.027  0.008  0.001  0.007  0.039  0.127
temptrend_abs.sc:mass.sc                         -0.010 -0.552 -0.030  0.436 -0.011  0.019  0.130  0.006
temptrend_abs.sc:speed.sc                        -0.036 -0.045 -0.536  0.187  0.031  0.092 -0.021  0.003
                                                 veg.sc t_.:REALMM t_.:REALMT tm_.:1 tmptrnd_bs.sc:t.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                     -0.155                                              
temptrend_abs.sc:REALMTerrestrial                 0.009  0.796                                       
temptrend_abs.sc:tsign1                          -0.001  0.015      0.007                            
temptrend_abs.sc:tempave.sc                      -0.137  0.005      0.024     -0.069                 
temptrend_abs.sc:tempave_metab.sc                 0.064 -0.022     -0.037      0.016 -0.441          
temptrend_abs.sc:seas.sc                         -0.131  0.084     -0.078     -0.019  0.048          
temptrend_abs.sc:microclim.sc                     0.026  0.034     -0.032      0.048 -0.132          
temptrend_abs.sc:mass.sc                         -0.004  0.021      0.027      0.024 -0.075          
temptrend_abs.sc:speed.sc                        -0.052  0.003      0.001     -0.005  0.157          
                                                 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                          0.047                                     
temptrend_abs.sc:microclim.sc                     0.108   0.136                             
temptrend_abs.sc:mass.sc                         -0.471  -0.044            -0.011           
temptrend_abs.sc:speed.sc                        -0.223   0.069             0.041           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                         0.059                                              
                                                 tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                 t-1:_. ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                 
REALMMarine                                                                                      
REALMTerrestrial                                                                                 
tsign1                                                                                           
tempave.sc                                                                                       
tempave_metab.sc                                                                                 
seas.sc                                                                                          
microclim.sc                                                                                     
mass.sc                                                                                          
speed.sc                                                                                         
lifespan.sc                                                                                      
consumerfrac.sc                                                                                  
endothermfrac.sc                                                                                 
nspp.sc                                                                                          
npp.sc                                                                                           
veg.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                
temptrend_abs.sc:tsign1                                                                          
temptrend_abs.sc:tempave.sc                                                                      
temptrend_abs.sc:tempave_metab.sc                                                                
temptrend_abs.sc:seas.sc                                                                         
temptrend_abs.sc:microclim.sc                                                                    
temptrend_abs.sc:mass.sc                                                                         
temptrend_abs.sc:speed.sc                                                                        
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.34716400 -0.35364009  0.05228794  0.52742556  6.59480022 

Number of Observations: 43493
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   235                  43493 
summary(modTfullfootprint)
Linear mixed-effects model fit by REML
 Data: trends[i1.2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.04731816 (Intr)
temptrend_abs.sc 0.03945538 -0.122

 Formula: ~1 | rarefyID %in% STUDY_ID
         (Intercept)  Residual
StdDev: 2.288017e-06 0.2861346

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.238289 
Fixed effects: Jtutrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tsign +      temptrend_abs.sc * tempave.sc + temptrend_abs.sc * tempave_metab.sc +      temptrend_abs.sc * seas.sc + temptrend_abs.sc * microclim.sc +      temptrend_abs.sc * mass.sc + temptrend_abs.sc * speed.sc +      temptrend_abs.sc * lifespan.sc + temptrend_abs.sc * consumerfrac.sc +      temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_footprint.sc:REALM2 
 Correlation: 
                                                    (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_.
temptrend_abs.sc                                    -0.417                                          
REALMMarine                                         -0.925  0.390                                   
REALMTerrestrial                                    -0.865  0.359  0.799                            
tsign1                                              -0.036  0.020  0.008  0.012                     
tempave.sc                                          -0.011  0.009  0.005 -0.005 -0.063              
tempave_metab.sc                                     0.057 -0.028 -0.049 -0.039 -0.027 -0.474       
seas.sc                                             -0.047  0.034  0.064 -0.013 -0.113  0.192 -0.109
microclim.sc                                        -0.017  0.016  0.028 -0.007  0.004  0.021 -0.055
mass.sc                                              0.015  0.008 -0.003  0.001  0.021  0.037 -0.501
speed.sc                                             0.003 -0.006  0.013  0.020 -0.045  0.099 -0.272
lifespan.sc                                          0.032 -0.022 -0.026 -0.044 -0.014 -0.099  0.710
consumerfrac.sc                                     -0.015  0.007  0.031  0.263  0.016 -0.026 -0.036
endothermfrac.sc                                     0.145 -0.051 -0.076 -0.312  0.010  0.134 -0.163
nspp.sc                                             -0.008 -0.017 -0.012 -0.028 -0.038  0.018 -0.019
npp.sc                                               0.018  0.001 -0.024  0.013  0.015 -0.336  0.252
veg.sc                                              -0.114  0.133  0.116  0.003 -0.018  0.195 -0.139
temptrend_abs.sc:REALMMarine                         0.400 -0.958 -0.401 -0.339 -0.004 -0.011  0.024
temptrend_abs.sc:REALMTerrestrial                    0.346 -0.845 -0.318 -0.420 -0.006 -0.008  0.018
temptrend_abs.sc:tsign1                              0.018 -0.043 -0.005 -0.005 -0.486  0.044  0.000
temptrend_abs.sc:tempave.sc                          0.008 -0.023 -0.012 -0.002  0.044 -0.604  0.312
temptrend_abs.sc:tempave_metab.sc                   -0.018  0.035  0.017  0.011 -0.008  0.332 -0.585
temptrend_abs.sc:seas.sc                             0.018 -0.048 -0.026  0.025  0.051 -0.037  0.006
temptrend_abs.sc:microclim.sc                        0.006 -0.016 -0.011  0.008 -0.039  0.053  0.000
temptrend_abs.sc:mass.sc                             0.006 -0.013 -0.008 -0.010 -0.014  0.021  0.266
temptrend_abs.sc:speed.sc                           -0.005  0.020 -0.006 -0.002  0.025 -0.090  0.127
                                                    ses.sc mcrcl. mss.sc spd.sc lfspn. cnsmr. endth.
temptrend_abs.sc                                                                                    
REALMMarine                                                                                         
REALMTerrestrial                                                                                    
tsign1                                                                                              
tempave.sc                                                                                          
tempave_metab.sc                                                                                    
seas.sc                                                                                             
microclim.sc                                         0.183                                          
mass.sc                                             -0.006  0.011                                   
speed.sc                                             0.093  0.071  0.137                            
lifespan.sc                                          0.014  0.006 -0.774 -0.449                     
consumerfrac.sc                                     -0.041  0.003  0.016 -0.067 -0.049              
endothermfrac.sc                                     0.029  0.027 -0.010 -0.168  0.063 -0.329       
nspp.sc                                             -0.037 -0.104 -0.217  0.010  0.150 -0.003  0.090
npp.sc                                              -0.208 -0.210 -0.042  0.048  0.031 -0.033 -0.099
veg.sc                                               0.126  0.018  0.036  0.042 -0.028 -0.052  0.018
temptrend_abs.sc:REALMMarine                        -0.046 -0.020 -0.012 -0.008  0.016 -0.009  0.032
temptrend_abs.sc:REALMTerrestrial                    0.034  0.016 -0.015 -0.006  0.028 -0.095  0.139
temptrend_abs.sc:tsign1                              0.022 -0.033 -0.012  0.017  0.006 -0.004  0.003
temptrend_abs.sc:tempave.sc                         -0.070  0.053  0.019 -0.059  0.035 -0.013 -0.106
temptrend_abs.sc:tempave_metab.sc                    0.002 -0.014  0.251  0.076 -0.350  0.055  0.135
temptrend_abs.sc:seas.sc                            -0.617 -0.089  0.017 -0.039 -0.015  0.029  0.006
temptrend_abs.sc:microclim.sc                       -0.060 -0.703 -0.006 -0.034  0.001 -0.002  0.001
temptrend_abs.sc:mass.sc                             0.014  0.001 -0.553 -0.026  0.436 -0.011  0.017
temptrend_abs.sc:speed.sc                           -0.037 -0.040 -0.041 -0.537  0.182  0.030  0.091
                                                    nspp.s npp.sc veg.sc t_.:REALMM t_.:REALMT tm_.:1
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                              -0.188                                           
veg.sc                                               0.010 -0.331                                    
temptrend_abs.sc:REALMMarine                         0.025  0.016 -0.145                             
temptrend_abs.sc:REALMTerrestrial                    0.042 -0.027  0.000  0.797                      
temptrend_abs.sc:tsign1                              0.027 -0.049  0.009  0.011      0.010           
temptrend_abs.sc:tempave.sc                         -0.022  0.183 -0.189  0.021      0.019     -0.065
temptrend_abs.sc:tempave_metab.sc                   -0.005 -0.164  0.101 -0.030     -0.032      0.012
temptrend_abs.sc:seas.sc                             0.030  0.107 -0.098  0.069     -0.071     -0.031
temptrend_abs.sc:microclim.sc                        0.040  0.153  0.051  0.021     -0.030      0.041
temptrend_abs.sc:mass.sc                             0.133  0.009 -0.002  0.018      0.028      0.023
temptrend_abs.sc:speed.sc                           -0.024  0.002 -0.052  0.004      0.000     -0.005
                                                    tmptrnd_bs.sc:t. tm_.:_. tmptrnd_bs.sc:ss.
temptrend_abs.sc                                                                              
REALMMarine                                                                                   
REALMTerrestrial                                                                              
tsign1                                                                                        
tempave.sc                                                                                    
tempave_metab.sc                                                                              
seas.sc                                                                                       
microclim.sc                                                                                  
mass.sc                                                                                       
speed.sc                                                                                      
lifespan.sc                                                                                   
consumerfrac.sc                                                                               
endothermfrac.sc                                                                              
nspp.sc                                                                                       
npp.sc                                                                                        
veg.sc                                                                                        
temptrend_abs.sc:REALMMarine                                                                  
temptrend_abs.sc:REALMTerrestrial                                                             
temptrend_abs.sc:tsign1                                                                       
temptrend_abs.sc:tempave.sc                                                                   
temptrend_abs.sc:tempave_metab.sc                   -0.435                                    
temptrend_abs.sc:seas.sc                             0.069            0.040                   
temptrend_abs.sc:microclim.sc                       -0.106            0.099   0.110           
temptrend_abs.sc:mass.sc                            -0.070           -0.473  -0.056           
temptrend_abs.sc:speed.sc                            0.160           -0.220   0.075           
                                                    tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms.
temptrend_abs.sc                                                                       
REALMMarine                                                                            
REALMTerrestrial                                                                       
tsign1                                                                                 
tempave.sc                                                                             
tempave_metab.sc                                                                       
seas.sc                                                                                
microclim.sc                                                                           
mass.sc                                                                                
speed.sc                                                                               
lifespan.sc                                                                            
consumerfrac.sc                                                                        
endothermfrac.sc                                                                       
nspp.sc                                                                                
npp.sc                                                                                 
veg.sc                                                                                 
temptrend_abs.sc:REALMMarine                                                           
temptrend_abs.sc:REALMTerrestrial                                                      
temptrend_abs.sc:tsign1                                                                
temptrend_abs.sc:tempave.sc                                                            
temptrend_abs.sc:tempave_metab.sc                                                      
temptrend_abs.sc:seas.sc                                                               
temptrend_abs.sc:microclim.sc                                                          
temptrend_abs.sc:mass.sc                            -0.024                             
temptrend_abs.sc:speed.sc                            0.045             0.056           
                                                    tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l. tmptrnd_bs.sc:c.
temptrend_abs.sc                                                                                       
REALMMarine                                                                                            
REALMTerrestrial                                                                                       
tsign1                                                                                                 
tempave.sc                                                                                             
tempave_metab.sc                                                                                       
seas.sc                                                                                                
microclim.sc                                                                                           
mass.sc                                                                                                
speed.sc                                                                                               
lifespan.sc                                                                                            
consumerfrac.sc                                                                                        
endothermfrac.sc                                                                                       
nspp.sc                                                                                                
npp.sc                                                                                                 
veg.sc                                                                                                 
temptrend_abs.sc:REALMMarine                                                                           
temptrend_abs.sc:REALMTerrestrial                                                                      
temptrend_abs.sc:tsign1                                                                                
temptrend_abs.sc:tempave.sc                                                                            
temptrend_abs.sc:tempave_metab.sc                                                                      
temptrend_abs.sc:seas.sc                                                                               
temptrend_abs.sc:microclim.sc                                                                          
temptrend_abs.sc:mass.sc                                                                               
temptrend_abs.sc:speed.sc                                                                              
                                                    tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns. t-1:_. ts1:_.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                    tmptrnd_bs.sc:np. tmptrnd_bs.sc:v. h_.:REALM2T
temptrend_abs.sc                                                                                  
REALMMarine                                                                                       
REALMTerrestrial                                                                                  
tsign1                                                                                            
tempave.sc                                                                                        
tempave_metab.sc                                                                                  
seas.sc                                                                                           
microclim.sc                                                                                      
mass.sc                                                                                           
speed.sc                                                                                          
lifespan.sc                                                                                       
consumerfrac.sc                                                                                   
endothermfrac.sc                                                                                  
nspp.sc                                                                                           
npp.sc                                                                                            
veg.sc                                                                                            
temptrend_abs.sc:REALMMarine                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                 
temptrend_abs.sc:tsign1                                                                           
temptrend_abs.sc:tempave.sc                                                                       
temptrend_abs.sc:tempave_metab.sc                                                                 
temptrend_abs.sc:seas.sc                                                                          
temptrend_abs.sc:microclim.sc                                                                     
temptrend_abs.sc:mass.sc                                                                          
temptrend_abs.sc:speed.sc                                                                         
                                                    h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                                                                    
temptrend_abs.sc:microclim.sc                                                               
temptrend_abs.sc:mass.sc                                                                    
temptrend_abs.sc:speed.sc                                                                   
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-8.3520451 -0.3535263  0.0534660  0.5265006  6.6044778 

Number of Observations: 43174
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   227                  43174 

Full model for Jaccard turnover, removing year 1

Try Bowler or Venter/Halpern human impact

summary(modTfullrem0)
Linear mixed-effects model fit by REML
 Data: trends[i1, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.007404753 (Intr)
temptrend_abs.sc 0.012100255 0.189 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev: 0.003350251 1.507894

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.902506 
Fixed effects: Jtutrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave.sc + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * lifespan.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_. ses.sc
temptrend_abs.sc                                 -0.613                                                 
REALMMarine                                      -0.940  0.600                                          
REALMTerrestrial                                 -0.692  0.344  0.639                                   
tsign1                                           -0.180  0.089  0.044  0.033                            
tempave.sc                                       -0.027  0.010  0.037  0.010 -0.061                     
tempave_metab.sc                                  0.121 -0.064 -0.131 -0.086 -0.013 -0.573              
seas.sc                                          -0.130  0.091  0.183 -0.087 -0.105  0.243 -0.078       
microclim.sc                                     -0.098  0.105  0.112 -0.015  0.047  0.022 -0.072  0.146
mass.sc                                          -0.015  0.056  0.026  0.072  0.021  0.001 -0.509  0.008
speed.sc                                          0.080 -0.035 -0.018 -0.071 -0.041  0.055 -0.224  0.052
lifespan.sc                                       0.079 -0.073 -0.090 -0.088 -0.041 -0.038  0.631  0.045
consumerfrac.sc                                  -0.081  0.052  0.042  0.345  0.046  0.027 -0.042 -0.111
endothermfrac.sc                                 -0.026  0.006  0.031 -0.191  0.020  0.506 -0.542  0.106
nspp.sc                                           0.033 -0.078 -0.101 -0.150 -0.043  0.017  0.010 -0.089
npp.sc                                            0.037 -0.012 -0.063  0.044  0.004 -0.244  0.243 -0.084
veg.sc                                           -0.475  0.482  0.506  0.007 -0.002  0.129 -0.132  0.080
temptrend_abs.sc:REALMMarine                      0.599 -0.964 -0.613 -0.321 -0.029 -0.031  0.069 -0.112
temptrend_abs.sc:REALMTerrestrial                 0.353 -0.648 -0.329 -0.540 -0.017  0.007  0.044  0.134
temptrend_abs.sc:tsign1                           0.107 -0.178 -0.050 -0.019 -0.519  0.079 -0.008  0.030
temptrend_abs.sc:tempave.sc                       0.047 -0.021 -0.061 -0.005  0.062 -0.730  0.460 -0.202
temptrend_abs.sc:tempave_metab.sc                -0.055  0.071  0.060  0.053 -0.018  0.446 -0.685  0.021
temptrend_abs.sc:seas.sc                          0.077 -0.124 -0.105  0.124  0.067 -0.146  0.038 -0.732
temptrend_abs.sc:microclim.sc                     0.088 -0.145 -0.094  0.017 -0.055  0.018  0.040 -0.081
temptrend_abs.sc:mass.sc                          0.039 -0.051 -0.038 -0.062 -0.017  0.031  0.297  0.016
temptrend_abs.sc:speed.sc                        -0.058  0.057  0.034  0.080  0.034 -0.046  0.161  0.000
                                                 mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s npp.sc
temptrend_abs.sc                                                                                        
REALMMarine                                                                                             
REALMTerrestrial                                                                                        
tsign1                                                                                                  
tempave.sc                                                                                              
tempave_metab.sc                                                                                        
seas.sc                                                                                                 
microclim.sc                                                                                            
mass.sc                                           0.006                                                 
speed.sc                                          0.049  0.115                                          
lifespan.sc                                       0.003 -0.848 -0.377                                   
consumerfrac.sc                                  -0.016  0.104 -0.336 -0.026                            
endothermfrac.sc                                  0.063 -0.096 -0.289  0.117 -0.078                     
nspp.sc                                          -0.113 -0.164  0.018  0.181 -0.052  0.168              
npp.sc                                           -0.187 -0.036  0.043  0.033 -0.031 -0.217 -0.172       
veg.sc                                            0.031  0.046  0.040 -0.055 -0.010  0.082  0.008 -0.273
temptrend_abs.sc:REALMMarine                     -0.107 -0.054  0.010  0.070 -0.034 -0.006  0.104  0.055
temptrend_abs.sc:REALMTerrestrial                 0.021 -0.080  0.058  0.072 -0.187  0.091  0.148 -0.068
temptrend_abs.sc:tsign1                          -0.046 -0.021  0.019  0.034 -0.027  0.013  0.031 -0.035
temptrend_abs.sc:tempave.sc                       0.011  0.034 -0.020 -0.005 -0.010 -0.454 -0.029  0.176
temptrend_abs.sc:tempave_metab.sc                -0.006  0.307  0.127 -0.382  0.066  0.406 -0.013 -0.177
temptrend_abs.sc:seas.sc                         -0.105  0.006 -0.017 -0.038  0.103 -0.073  0.069  0.065
temptrend_abs.sc:microclim.sc                    -0.812  0.006 -0.025 -0.005  0.000 -0.039  0.064  0.182
temptrend_abs.sc:mass.sc                          0.024 -0.603 -0.058  0.524 -0.064  0.068  0.109 -0.012
temptrend_abs.sc:speed.sc                        -0.011 -0.067 -0.630  0.222  0.224  0.160 -0.065 -0.009
                                                 veg.sc t_.:REALMM t_.:REALMT tm_.:1 tmptrnd_bs.sc:t.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                     -0.516                                              
temptrend_abs.sc:REALMTerrestrial                 0.021  0.600                                       
temptrend_abs.sc:tsign1                          -0.023  0.069      0.019                            
temptrend_abs.sc:tempave.sc                      -0.120  0.057     -0.035     -0.106                 
temptrend_abs.sc:tempave_metab.sc                 0.102 -0.077     -0.080      0.021 -0.498          
temptrend_abs.sc:seas.sc                         -0.074  0.164     -0.214     -0.051  0.285          
temptrend_abs.sc:microclim.sc                    -0.051  0.152     -0.038      0.048 -0.028          
temptrend_abs.sc:mass.sc                         -0.017  0.054      0.122      0.028 -0.051          
temptrend_abs.sc:speed.sc                        -0.036 -0.017     -0.059     -0.017  0.064          
                                                 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                         -0.036                                     
temptrend_abs.sc:microclim.sc                     0.056   0.146                             
temptrend_abs.sc:mass.sc                         -0.539  -0.053            -0.049           
temptrend_abs.sc:speed.sc                        -0.292   0.050             0.018           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                         0.140                                              
                                                 tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                 t-1:_. ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                 
REALMMarine                                                                                      
REALMTerrestrial                                                                                 
tsign1                                                                                           
tempave.sc                                                                                       
tempave_metab.sc                                                                                 
seas.sc                                                                                          
microclim.sc                                                                                     
mass.sc                                                                                          
speed.sc                                                                                         
lifespan.sc                                                                                      
consumerfrac.sc                                                                                  
endothermfrac.sc                                                                                 
nspp.sc                                                                                          
npp.sc                                                                                           
veg.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                
temptrend_abs.sc:tsign1                                                                          
temptrend_abs.sc:tempave.sc                                                                      
temptrend_abs.sc:tempave_metab.sc                                                                
temptrend_abs.sc:seas.sc                                                                         
temptrend_abs.sc:microclim.sc                                                                    
temptrend_abs.sc:mass.sc                                                                         
temptrend_abs.sc:speed.sc                                                                        
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-7.01782639 -0.26254472 -0.02396528  0.31237827  5.40866015 

Number of Observations: 31072
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   218                  31072 
summary(modTfullfootprintrem0)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.007176109 (Intr)
temptrend_abs.sc 0.015663961 0.105 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev: 0.003466799 1.508598

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.903419 
Fixed effects: Jtutrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave.sc + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * lifespan.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_footprint.sc:REALM2 
 Correlation: 
                                                    (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_.
temptrend_abs.sc                                    -0.624                                          
REALMMarine                                         -0.940  0.606                                   
REALMTerrestrial                                    -0.673  0.357  0.615                            
tsign1                                              -0.179  0.082  0.041  0.041                     
tempave.sc                                          -0.054  0.035  0.068 -0.001 -0.055              
tempave_metab.sc                                     0.142 -0.078 -0.152 -0.076 -0.025 -0.572       
seas.sc                                             -0.130  0.085  0.182 -0.098 -0.107  0.247 -0.073
microclim.sc                                        -0.091  0.083  0.105 -0.014  0.042  0.063 -0.091
mass.sc                                             -0.015  0.053  0.023  0.082  0.022  0.014 -0.510
speed.sc                                             0.083 -0.041 -0.016 -0.091 -0.040  0.057 -0.216
lifespan.sc                                          0.083 -0.071 -0.096 -0.085 -0.043 -0.052  0.637
consumerfrac.sc                                     -0.076  0.047  0.032  0.359  0.047  0.031 -0.037
endothermfrac.sc                                    -0.046  0.018  0.050 -0.203  0.027  0.494 -0.546
nspp.sc                                              0.034 -0.071 -0.096 -0.150 -0.042  0.021  0.006
npp.sc                                               0.074 -0.038 -0.104  0.026  0.005 -0.280  0.264
veg.sc                                              -0.505  0.473  0.536  0.013 -0.007  0.174 -0.164
temptrend_abs.sc:REALMMarine                         0.607 -0.959 -0.620 -0.327 -0.023 -0.060  0.084
temptrend_abs.sc:REALMTerrestrial                    0.350 -0.651 -0.319 -0.559 -0.023  0.018  0.032
temptrend_abs.sc:tsign1                              0.101 -0.161 -0.041 -0.024 -0.518  0.078 -0.006
temptrend_abs.sc:tempave.sc                          0.073 -0.058 -0.093  0.001  0.057 -0.736  0.448
temptrend_abs.sc:tempave_metab.sc                   -0.074  0.090  0.080  0.045 -0.009  0.440 -0.686
temptrend_abs.sc:seas.sc                             0.080 -0.131 -0.112  0.127  0.070 -0.163  0.034
temptrend_abs.sc:microclim.sc                        0.067 -0.107 -0.073  0.021 -0.051 -0.007  0.051
temptrend_abs.sc:mass.sc                             0.036 -0.043 -0.036 -0.065 -0.018  0.028  0.299
temptrend_abs.sc:speed.sc                           -0.060  0.061  0.028  0.087  0.035 -0.053  0.150
                                                    ses.sc mcrcl. mss.sc spd.sc lfspn. cnsmr. endth.
temptrend_abs.sc                                                                                    
REALMMarine                                                                                         
REALMTerrestrial                                                                                    
tsign1                                                                                              
tempave.sc                                                                                          
tempave_metab.sc                                                                                    
seas.sc                                                                                             
microclim.sc                                         0.156                                          
mass.sc                                              0.010 -0.002                                   
speed.sc                                             0.051  0.054  0.100                            
lifespan.sc                                          0.045  0.011 -0.837 -0.370                     
consumerfrac.sc                                     -0.111 -0.011  0.121 -0.358 -0.010              
endothermfrac.sc                                     0.104  0.088 -0.090 -0.281  0.103 -0.079       
nspp.sc                                             -0.100 -0.124 -0.168  0.024  0.179 -0.054  0.169
npp.sc                                              -0.132 -0.206 -0.043  0.045  0.031 -0.058 -0.224
veg.sc                                               0.096  0.025  0.046  0.035 -0.053 -0.001  0.112
temptrend_abs.sc:REALMMarine                        -0.111 -0.088 -0.051  0.009  0.067 -0.025 -0.020
temptrend_abs.sc:REALMTerrestrial                    0.138  0.024 -0.082  0.069  0.067 -0.207  0.112
temptrend_abs.sc:tsign1                              0.040 -0.032 -0.019  0.017  0.033 -0.021  0.010
temptrend_abs.sc:tempave.sc                         -0.210 -0.016  0.025 -0.034  0.007 -0.008 -0.428
temptrend_abs.sc:tempave_metab.sc                    0.015  0.006  0.308  0.120 -0.391  0.051  0.410
temptrend_abs.sc:seas.sc                            -0.736 -0.103  0.007 -0.031 -0.040  0.106 -0.068
temptrend_abs.sc:microclim.sc                       -0.081 -0.822  0.010 -0.034 -0.009  0.006 -0.051
temptrend_abs.sc:mass.sc                             0.015  0.028 -0.604 -0.047  0.522 -0.068  0.064
temptrend_abs.sc:speed.sc                           -0.014 -0.017 -0.053 -0.636  0.211  0.243  0.162
                                                    nspp.s npp.sc veg.sc t_.:REALMM t_.:REALMT tm_.:1
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                              -0.176                                           
veg.sc                                               0.018 -0.310                                    
temptrend_abs.sc:REALMMarine                         0.098  0.081 -0.506                             
temptrend_abs.sc:REALMTerrestrial                    0.138 -0.049  0.015  0.593                      
temptrend_abs.sc:tsign1                              0.026 -0.036 -0.011  0.054      0.026           
temptrend_abs.sc:tempave.sc                         -0.018  0.192 -0.170  0.097     -0.037     -0.102
temptrend_abs.sc:tempave_metab.sc                   -0.008 -0.190  0.129 -0.094     -0.067      0.018
temptrend_abs.sc:seas.sc                             0.084  0.092 -0.092  0.177     -0.206     -0.064
temptrend_abs.sc:microclim.sc                        0.072  0.194 -0.016  0.120     -0.046      0.024
temptrend_abs.sc:mass.sc                             0.113 -0.009 -0.012  0.045      0.119      0.026
temptrend_abs.sc:speed.sc                           -0.062 -0.010 -0.033 -0.012     -0.065     -0.013
                                                    tmptrnd_bs.sc:t. tm_.:_. tmptrnd_bs.sc:ss.
temptrend_abs.sc                                                                              
REALMMarine                                                                                   
REALMTerrestrial                                                                              
tsign1                                                                                        
tempave.sc                                                                                    
tempave_metab.sc                                                                              
seas.sc                                                                                       
microclim.sc                                                                                  
mass.sc                                                                                       
speed.sc                                                                                      
lifespan.sc                                                                                   
consumerfrac.sc                                                                               
endothermfrac.sc                                                                              
nspp.sc                                                                                       
npp.sc                                                                                        
veg.sc                                                                                        
temptrend_abs.sc:REALMMarine                                                                  
temptrend_abs.sc:REALMTerrestrial                                                             
temptrend_abs.sc:tsign1                                                                       
temptrend_abs.sc:tempave.sc                                                                   
temptrend_abs.sc:tempave_metab.sc                   -0.473                                    
temptrend_abs.sc:seas.sc                             0.292           -0.025                   
temptrend_abs.sc:microclim.sc                        0.014            0.048   0.161           
temptrend_abs.sc:mass.sc                            -0.042           -0.542  -0.049           
temptrend_abs.sc:speed.sc                            0.075           -0.279   0.060           
                                                    tmptrnd_bs.sc:mc. tmptrnd_bs.sc:ms.
temptrend_abs.sc                                                                       
REALMMarine                                                                            
REALMTerrestrial                                                                       
tsign1                                                                                 
tempave.sc                                                                             
tempave_metab.sc                                                                       
seas.sc                                                                                
microclim.sc                                                                           
mass.sc                                                                                
speed.sc                                                                               
lifespan.sc                                                                            
consumerfrac.sc                                                                        
endothermfrac.sc                                                                       
nspp.sc                                                                                
npp.sc                                                                                 
veg.sc                                                                                 
temptrend_abs.sc:REALMMarine                                                           
temptrend_abs.sc:REALMTerrestrial                                                      
temptrend_abs.sc:tsign1                                                                
temptrend_abs.sc:tempave.sc                                                            
temptrend_abs.sc:tempave_metab.sc                                                      
temptrend_abs.sc:seas.sc                                                               
temptrend_abs.sc:microclim.sc                                                          
temptrend_abs.sc:mass.sc                            -0.057                             
temptrend_abs.sc:speed.sc                            0.026             0.130           
                                                    tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l. tmptrnd_bs.sc:c.
temptrend_abs.sc                                                                                       
REALMMarine                                                                                            
REALMTerrestrial                                                                                       
tsign1                                                                                                 
tempave.sc                                                                                             
tempave_metab.sc                                                                                       
seas.sc                                                                                                
microclim.sc                                                                                           
mass.sc                                                                                                
speed.sc                                                                                               
lifespan.sc                                                                                            
consumerfrac.sc                                                                                        
endothermfrac.sc                                                                                       
nspp.sc                                                                                                
npp.sc                                                                                                 
veg.sc                                                                                                 
temptrend_abs.sc:REALMMarine                                                                           
temptrend_abs.sc:REALMTerrestrial                                                                      
temptrend_abs.sc:tsign1                                                                                
temptrend_abs.sc:tempave.sc                                                                            
temptrend_abs.sc:tempave_metab.sc                                                                      
temptrend_abs.sc:seas.sc                                                                               
temptrend_abs.sc:microclim.sc                                                                          
temptrend_abs.sc:mass.sc                                                                               
temptrend_abs.sc:speed.sc                                                                              
                                                    tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns. t-1:_. ts1:_.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                    tmptrnd_bs.sc:np. tmptrnd_bs.sc:v. h_.:REALM2T
temptrend_abs.sc                                                                                  
REALMMarine                                                                                       
REALMTerrestrial                                                                                  
tsign1                                                                                            
tempave.sc                                                                                        
tempave_metab.sc                                                                                  
seas.sc                                                                                           
microclim.sc                                                                                      
mass.sc                                                                                           
speed.sc                                                                                          
lifespan.sc                                                                                       
consumerfrac.sc                                                                                   
endothermfrac.sc                                                                                  
nspp.sc                                                                                           
npp.sc                                                                                            
veg.sc                                                                                            
temptrend_abs.sc:REALMMarine                                                                      
temptrend_abs.sc:REALMTerrestrial                                                                 
temptrend_abs.sc:tsign1                                                                           
temptrend_abs.sc:tempave.sc                                                                       
temptrend_abs.sc:tempave_metab.sc                                                                 
temptrend_abs.sc:seas.sc                                                                          
temptrend_abs.sc:microclim.sc                                                                     
temptrend_abs.sc:mass.sc                                                                          
temptrend_abs.sc:speed.sc                                                                         
                                                    h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                                                                    
temptrend_abs.sc:microclim.sc                                                               
temptrend_abs.sc:mass.sc                                                                    
temptrend_abs.sc:speed.sc                                                                   
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-7.02311163 -0.26176466 -0.02363408  0.31203019  5.40892698 

Number of Observations: 30801
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   210                  30801 

Full models for total and HM

i2 <- trends[, complete.cases(Jbetatrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]
i3 <- trends[, complete.cases(Horntrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

# full models
if(file.exists('temp/modTfullJbeta.rds')){
  modTfullJbeta <- readRDS('temp/modTfullJbeta.rds')
} else {
  modTfullJbeta <- lme(Jbetatrend ~ temptrend_abs.sc*REALM + 
                         temptrend_abs.sc*tsign +
                         temptrend_abs.sc*tempave.sc +
                         temptrend_abs.sc*tempave_metab.sc + 
                         temptrend_abs.sc*seas.sc + 
                         temptrend_abs.sc*microclim.sc + 
                         temptrend_abs.sc*mass.sc + 
                         temptrend_abs.sc*speed.sc + 
                         temptrend_abs.sc*lifespan.sc + 
                         temptrend_abs.sc*consumerfrac.sc +
                         temptrend_abs.sc*endothermfrac.sc +
                         temptrend_abs.sc*nspp.sc +
                         temptrend_abs.sc*thermal_bias.sc:tsign +
                         temptrend_abs.sc*npp.sc +
                         temptrend_abs.sc*veg.sc +
                         temptrend_abs.sc*human_bowler.sc:REALM2,
                       random = randef, weights = varef, data = trends[i2,], method = 'REML')
  saveRDS(modTfullJbeta, file = 'temp/modTfullJbeta.rds')
}

if(file.exists('temp/modTfullHorn.rds')){
  modTfullHorn <- readRDS('temp/modTfullHorn.rds')
} else {
  modTfullHorn <- lme(Horntrend ~ temptrend_abs.sc*REALM + 
                        temptrend_abs.sc*tsign +
                        temptrend_abs.sc*tempave.sc +
                        temptrend_abs.sc*tempave_metab.sc + 
                        temptrend_abs.sc*seas.sc + 
                        temptrend_abs.sc*microclim.sc + 
                        temptrend_abs.sc*mass.sc + 
                        temptrend_abs.sc*speed.sc + 
                        temptrend_abs.sc*lifespan.sc + 
                        temptrend_abs.sc*consumerfrac.sc +
                        temptrend_abs.sc*endothermfrac.sc +
                        temptrend_abs.sc*nspp.sc +
                        temptrend_abs.sc*thermal_bias.sc:tsign +
                        temptrend_abs.sc*npp.sc +
                        temptrend_abs.sc*veg.sc +
                        temptrend_abs.sc*human_bowler.sc:REALM2,
                      random = randef, weights = varef, data = trends[i3,], method = 'REML')
  saveRDS(modTfullHorn, file = 'temp/modTfullHorn.rds')
}

summary(modTfullJbeta)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.06277468 (Intr)
temptrend_abs.sc 0.04847031 -0.175

 Formula: ~1 | rarefyID %in% STUDY_ID
         (Intercept)  Residual
StdDev: 0.0002039828 0.3158091

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.351927 
Fixed effects: Jbetatrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tsign +      temptrend_abs.sc * tempave.sc + temptrend_abs.sc * tempave_metab.sc +      temptrend_abs.sc * seas.sc + temptrend_abs.sc * microclim.sc +      temptrend_abs.sc * mass.sc + temptrend_abs.sc * speed.sc +      temptrend_abs.sc * lifespan.sc + temptrend_abs.sc * consumerfrac.sc +      temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_. ses.sc
temptrend_abs.sc                                 -0.430                                                 
REALMMarine                                      -0.929  0.402                                          
REALMTerrestrial                                 -0.876  0.377  0.815                                   
tsign1                                           -0.026  0.017  0.006  0.009                            
tempave.sc                                       -0.003  0.000 -0.004 -0.005 -0.070                     
tempave_metab.sc                                  0.038 -0.020 -0.030 -0.031 -0.022 -0.454              
seas.sc                                          -0.030  0.037  0.040 -0.012 -0.107  0.154 -0.084       
microclim.sc                                     -0.008  0.018  0.014 -0.006  0.020 -0.060 -0.022  0.127
mass.sc                                           0.012  0.006 -0.002 -0.002  0.019  0.021 -0.486  0.007
speed.sc                                          0.000 -0.005  0.009  0.017 -0.049  0.106 -0.277  0.102
lifespan.sc                                       0.024 -0.019 -0.019 -0.035 -0.015 -0.086  0.707  0.005
consumerfrac.sc                                  -0.003  0.005  0.024  0.252  0.015 -0.044 -0.025 -0.051
endothermfrac.sc                                  0.133 -0.056 -0.068 -0.269  0.003  0.099 -0.111  0.012
nspp.sc                                          -0.007 -0.011 -0.009 -0.019 -0.038  0.002 -0.023 -0.060
npp.sc                                            0.004  0.004 -0.005  0.006  0.013 -0.245  0.196 -0.088
veg.sc                                           -0.075  0.119  0.073 -0.004 -0.016  0.141 -0.098  0.121
temptrend_abs.sc:REALMMarine                      0.413 -0.960 -0.415 -0.359 -0.004  0.003  0.015 -0.046
temptrend_abs.sc:REALMTerrestrial                 0.363 -0.858 -0.336 -0.433 -0.005 -0.011  0.020  0.026
temptrend_abs.sc:tsign1                           0.013 -0.037 -0.005 -0.004 -0.484  0.050 -0.002  0.013
temptrend_abs.sc:tempave.sc                       0.000 -0.005 -0.002 -0.002  0.052 -0.625  0.315 -0.052
temptrend_abs.sc:tempave_metab.sc                -0.009  0.023  0.008  0.010 -0.012  0.335 -0.597 -0.010
temptrend_abs.sc:seas.sc                          0.016 -0.050 -0.020  0.021  0.044  0.003 -0.008 -0.647
temptrend_abs.sc:microclim.sc                     0.006 -0.026 -0.009  0.007 -0.044  0.089 -0.014 -0.053
temptrend_abs.sc:mass.sc                          0.006 -0.010 -0.007 -0.006 -0.015  0.030  0.262  0.008
temptrend_abs.sc:speed.sc                        -0.004  0.018 -0.003 -0.001  0.026 -0.096  0.128 -0.035
                                                 mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s npp.sc
temptrend_abs.sc                                                                                        
REALMMarine                                                                                             
REALMTerrestrial                                                                                        
tsign1                                                                                                  
tempave.sc                                                                                              
tempave_metab.sc                                                                                        
seas.sc                                                                                                 
microclim.sc                                                                                            
mass.sc                                           0.056                                                 
speed.sc                                          0.072  0.129                                          
lifespan.sc                                      -0.027 -0.760 -0.455                                   
consumerfrac.sc                                  -0.001  0.014 -0.049 -0.047                            
endothermfrac.sc                                  0.009  0.001 -0.142  0.068 -0.328                     
nspp.sc                                          -0.115 -0.208  0.014  0.134 -0.009  0.067              
npp.sc                                           -0.090 -0.044  0.048  0.035 -0.029 -0.049 -0.182       
veg.sc                                           -0.019  0.034  0.052 -0.029 -0.069 -0.012  0.002 -0.271
temptrend_abs.sc:REALMMarine                     -0.022 -0.010 -0.005  0.014 -0.010  0.036  0.020  0.008
temptrend_abs.sc:REALMTerrestrial                 0.010 -0.008 -0.006  0.023 -0.100  0.135  0.031 -0.018
temptrend_abs.sc:tsign1                          -0.041 -0.015  0.019  0.008 -0.004  0.006  0.025 -0.048
temptrend_abs.sc:tempave.sc                       0.083  0.028 -0.064  0.031 -0.009 -0.087 -0.016  0.157
temptrend_abs.sc:tempave_metab.sc                -0.034  0.244  0.069 -0.350  0.049  0.105 -0.006 -0.141
temptrend_abs.sc:seas.sc                         -0.088  0.007 -0.037 -0.005  0.041  0.019  0.040  0.061
temptrend_abs.sc:microclim.sc                    -0.693 -0.028 -0.029  0.018  0.002  0.009  0.045  0.103
temptrend_abs.sc:mass.sc                         -0.017 -0.555 -0.024  0.434 -0.005  0.014  0.131  0.005
temptrend_abs.sc:speed.sc                        -0.041 -0.044 -0.547  0.187  0.022  0.079 -0.024  0.006
                                                 veg.sc t_.:REALMM t_.:REALMT tm_.:1 tmptrnd_bs.sc:t.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                     -0.129                                              
temptrend_abs.sc:REALMTerrestrial                 0.005  0.814                                       
temptrend_abs.sc:tsign1                          -0.004  0.012      0.007                            
temptrend_abs.sc:tempave.sc                      -0.140 -0.001      0.017     -0.076                 
temptrend_abs.sc:tempave_metab.sc                 0.060 -0.019     -0.030      0.015 -0.420          
temptrend_abs.sc:seas.sc                         -0.127  0.068     -0.052     -0.018  0.060          
temptrend_abs.sc:microclim.sc                     0.024  0.030     -0.023      0.047 -0.119          
temptrend_abs.sc:mass.sc                         -0.005  0.016      0.018      0.026 -0.073          
temptrend_abs.sc:speed.sc                        -0.057  0.001      0.000     -0.006  0.161          
                                                 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                          0.031                                     
temptrend_abs.sc:microclim.sc                     0.104   0.139                             
temptrend_abs.sc:mass.sc                         -0.469  -0.045            -0.010           
temptrend_abs.sc:speed.sc                        -0.223   0.074             0.046           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                         0.063                                              
                                                 tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                 t-1:_. ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                 
REALMMarine                                                                                      
REALMTerrestrial                                                                                 
tsign1                                                                                           
tempave.sc                                                                                       
tempave_metab.sc                                                                                 
seas.sc                                                                                          
microclim.sc                                                                                     
mass.sc                                                                                          
speed.sc                                                                                         
lifespan.sc                                                                                      
consumerfrac.sc                                                                                  
endothermfrac.sc                                                                                 
nspp.sc                                                                                          
npp.sc                                                                                           
veg.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                
temptrend_abs.sc:tsign1                                                                          
temptrend_abs.sc:tempave.sc                                                                      
temptrend_abs.sc:tempave_metab.sc                                                                
temptrend_abs.sc:seas.sc                                                                         
temptrend_abs.sc:microclim.sc                                                                    
temptrend_abs.sc:mass.sc                                                                         
temptrend_abs.sc:speed.sc                                                                        
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
       Min         Q1        Med         Q3        Max 
-7.3991424 -0.2444604  0.1291713  0.6077538  6.7430991 

Number of Observations: 43493
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   235                  43493 
summary(modTfullHorn)
Linear mixed-effects model fit by REML
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.06157166 (Intr)
temptrend_abs.sc 0.04045651 -0.087

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.004171557 0.2960534

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.223338 
Fixed effects: Horntrend ~ temptrend_abs.sc * REALM + temptrend_abs.sc * tsign +      temptrend_abs.sc * tempave.sc + temptrend_abs.sc * tempave_metab.sc +      temptrend_abs.sc * seas.sc + temptrend_abs.sc * microclim.sc +      temptrend_abs.sc * mass.sc + temptrend_abs.sc * speed.sc +      temptrend_abs.sc * lifespan.sc + temptrend_abs.sc * consumerfrac.sc +      temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_. ses.sc
temptrend_abs.sc                                 -0.380                                                 
REALMMarine                                      -0.917  0.352                                          
REALMTerrestrial                                 -0.858  0.326  0.781                                   
tsign1                                           -0.032  0.020  0.007  0.013                            
tempave.sc                                       -0.007  0.003  0.004 -0.005 -0.074                     
tempave_metab.sc                                  0.050 -0.023 -0.042 -0.039 -0.022 -0.506              
seas.sc                                          -0.043  0.037  0.059 -0.014 -0.114  0.205 -0.112       
microclim.sc                                     -0.017  0.022  0.025 -0.007  0.006 -0.034 -0.034  0.148
mass.sc                                           0.012  0.010 -0.001  0.003  0.021  0.023 -0.485 -0.004
speed.sc                                          0.005 -0.005  0.011  0.013 -0.049  0.105 -0.269  0.097
lifespan.sc                                       0.029 -0.020 -0.024 -0.040 -0.015 -0.087  0.691  0.018
consumerfrac.sc                                  -0.004  0.007  0.002  0.268  0.019 -0.026 -0.021 -0.047
endothermfrac.sc                                  0.142 -0.048 -0.069 -0.299  0.004  0.153 -0.163  0.037
nspp.sc                                          -0.010 -0.017 -0.009 -0.023 -0.031  0.016 -0.021 -0.019
npp.sc                                            0.015  0.004 -0.018  0.009  0.011 -0.292  0.228 -0.205
veg.sc                                           -0.110  0.123  0.112 -0.003 -0.017  0.148 -0.106  0.135
temptrend_abs.sc:REALMMarine                      0.364 -0.957 -0.362 -0.306 -0.006 -0.005  0.019 -0.048
temptrend_abs.sc:REALMTerrestrial                 0.313 -0.840 -0.285 -0.387 -0.006 -0.008  0.025  0.041
temptrend_abs.sc:tsign1                           0.016 -0.044 -0.006 -0.005 -0.489  0.042  0.003  0.015
temptrend_abs.sc:tempave.sc                       0.004 -0.009 -0.008 -0.002  0.050 -0.571  0.306 -0.056
temptrend_abs.sc:tempave_metab.sc                -0.014  0.028  0.013  0.016 -0.010  0.316 -0.574 -0.007
temptrend_abs.sc:seas.sc                          0.018 -0.056 -0.025  0.029  0.045 -0.031  0.006 -0.606
temptrend_abs.sc:microclim.sc                     0.009 -0.026 -0.012  0.007 -0.038  0.064 -0.005 -0.075
temptrend_abs.sc:mass.sc                          0.007 -0.017 -0.008 -0.011 -0.013  0.021  0.260  0.005
temptrend_abs.sc:speed.sc                        -0.004  0.020 -0.005 -0.001  0.025 -0.081  0.123 -0.028
                                                 mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s npp.sc
temptrend_abs.sc                                                                                        
REALMMarine                                                                                             
REALMTerrestrial                                                                                        
tsign1                                                                                                  
tempave.sc                                                                                              
tempave_metab.sc                                                                                        
seas.sc                                                                                                 
microclim.sc                                                                                            
mass.sc                                           0.023                                                 
speed.sc                                          0.063  0.148                                          
lifespan.sc                                       0.003 -0.778 -0.448                                   
consumerfrac.sc                                  -0.006  0.014 -0.062 -0.040                            
endothermfrac.sc                                  0.018 -0.011 -0.145  0.060 -0.317                     
nspp.sc                                          -0.081 -0.222  0.000  0.149 -0.004  0.083              
npp.sc                                           -0.224 -0.034  0.046  0.028 -0.014 -0.083 -0.195       
veg.sc                                            0.022  0.028  0.040 -0.022 -0.049  0.013  0.014 -0.276
temptrend_abs.sc:REALMMarine                     -0.025 -0.014 -0.007  0.015 -0.008  0.032  0.025  0.011
temptrend_abs.sc:REALMTerrestrial                 0.012 -0.018 -0.004  0.027 -0.085  0.133  0.041 -0.024
temptrend_abs.sc:tsign1                          -0.036 -0.013  0.018  0.007 -0.006  0.004  0.024 -0.046
temptrend_abs.sc:tempave.sc                       0.076  0.025 -0.061  0.030 -0.011 -0.099 -0.017  0.144
temptrend_abs.sc:tempave_metab.sc                -0.017  0.248  0.078 -0.347  0.050  0.120 -0.005 -0.142
temptrend_abs.sc:seas.sc                         -0.101  0.009 -0.035 -0.011  0.032  0.002  0.016  0.109
temptrend_abs.sc:microclim.sc                    -0.660 -0.008 -0.026  0.001  0.003  0.001  0.033  0.155
temptrend_abs.sc:mass.sc                         -0.008 -0.552 -0.034  0.435 -0.012  0.019  0.131  0.007
temptrend_abs.sc:speed.sc                        -0.034 -0.047 -0.533  0.186  0.020  0.084 -0.017 -0.001
                                                 veg.sc t_.:REALMM t_.:REALMT tm_.:1 tmptrnd_bs.sc:t.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                     -0.136                                              
temptrend_abs.sc:REALMTerrestrial                 0.013  0.789                                       
temptrend_abs.sc:tsign1                           0.003  0.014      0.009                            
temptrend_abs.sc:tempave.sc                      -0.130  0.008      0.018     -0.068                 
temptrend_abs.sc:tempave_metab.sc                 0.057 -0.021     -0.050      0.012 -0.434          
temptrend_abs.sc:seas.sc                         -0.131  0.076     -0.080     -0.020  0.034          
temptrend_abs.sc:microclim.sc                     0.021  0.030     -0.029      0.050 -0.144          
temptrend_abs.sc:mass.sc                         -0.001  0.021      0.033      0.025 -0.080          
temptrend_abs.sc:speed.sc                        -0.047  0.004     -0.002     -0.004  0.162          
                                                 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                          0.052                                     
temptrend_abs.sc:microclim.sc                     0.103   0.138                             
temptrend_abs.sc:mass.sc                         -0.465  -0.040            -0.008           
temptrend_abs.sc:speed.sc                        -0.216   0.064             0.039           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                         0.058                                              
                                                 tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                 t-1:_. ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                 
REALMMarine                                                                                      
REALMTerrestrial                                                                                 
tsign1                                                                                           
tempave.sc                                                                                       
tempave_metab.sc                                                                                 
seas.sc                                                                                          
microclim.sc                                                                                     
mass.sc                                                                                          
speed.sc                                                                                         
lifespan.sc                                                                                      
consumerfrac.sc                                                                                  
endothermfrac.sc                                                                                 
nspp.sc                                                                                          
npp.sc                                                                                           
veg.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                
temptrend_abs.sc:tsign1                                                                          
temptrend_abs.sc:tempave.sc                                                                      
temptrend_abs.sc:tempave_metab.sc                                                                
temptrend_abs.sc:seas.sc                                                                         
temptrend_abs.sc:microclim.sc                                                                    
temptrend_abs.sc:mass.sc                                                                         
temptrend_abs.sc:speed.sc                                                                        
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-6.73851930 -0.38297739  0.03926292  0.54007605  6.19209050 

Number of Observations: 42493
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   202                  42493 

Full models for total and HM (remove year 1)

i2 <- trends[, complete.cases(Jbetatrendrem0, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, human_bowler.sc)]
i3 <- trends[, complete.cases(Horntrendrem0, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                             temptrend.sc, temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                             consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, 
                             veg.sc, human_bowler.sc)]

randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
varef <- varPower(-0.5, ~nyrBT)

# full models
if(file.exists('temp/modTfullJbetarem0.rds')){
  modTfullJbetarem0 <- readRDS('temp/modTfullJbetarem0.rds')
} else {
  modTfullJbetarem0 <- lme(Jbetatrendrem0 ~ temptrend_abs.sc*REALM + 
                         temptrend_abs.sc*tsign +
                         temptrend_abs.sc*tempave.sc +
                         temptrend_abs.sc*tempave_metab.sc + 
                         temptrend_abs.sc*seas.sc + 
                         temptrend_abs.sc*microclim.sc + 
                         temptrend_abs.sc*mass.sc + 
                         temptrend_abs.sc*speed.sc + 
                         temptrend_abs.sc*lifespan.sc + 
                         temptrend_abs.sc*consumerfrac.sc +
                         temptrend_abs.sc*endothermfrac.sc +
                         temptrend_abs.sc*nspp.sc +
                         temptrend_abs.sc*thermal_bias.sc:tsign +
                         temptrend_abs.sc*npp.sc +
                         temptrend_abs.sc*veg.sc +
                         temptrend_abs.sc*human_bowler.sc:REALM2,
                       random = randef, weights = varef, data = trends[i2,], method = 'REML')
  saveRDS(modTfullJbetarem0, file = 'temp/modTfullJbetarem0.rds')
}

if(file.exists('temp/modTfullHornrem0.rds')){
  modTfullHornrem0 <- readRDS('temp/modTfullHornrem0.rds')
} else {
  modTfullHornrem0 <- lme(Horntrendrem0 ~ temptrend_abs.sc*REALM + 
                        temptrend_abs.sc*tsign +
                        temptrend_abs.sc*tempave.sc +
                        temptrend_abs.sc*tempave_metab.sc + 
                        temptrend_abs.sc*seas.sc + 
                        temptrend_abs.sc*microclim.sc + 
                        temptrend_abs.sc*mass.sc + 
                        temptrend_abs.sc*speed.sc + 
                        temptrend_abs.sc*lifespan.sc + 
                        temptrend_abs.sc*consumerfrac.sc +
                        temptrend_abs.sc*endothermfrac.sc +
                        temptrend_abs.sc*nspp.sc +
                        temptrend_abs.sc*thermal_bias.sc:tsign +
                        temptrend_abs.sc*npp.sc +
                        temptrend_abs.sc*veg.sc +
                        temptrend_abs.sc*human_bowler.sc:REALM2,
                      random = randef, weights = varef, data = trends[i3,], method = 'REML')
  saveRDS(modTfullHornrem0, file = 'temp/modTfullHornrem0.rds')
}

summary(modTfullJbetarem0)
Linear mixed-effects model fit by REML
 Data: trends[i2, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev      Corr  
(Intercept)      0.007723766 (Intr)
temptrend_abs.sc 0.017251054 0.308 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept)  Residual
StdDev: 0.002065633 0.8886333

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-1.821858 
Fixed effects: Jbetatrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave.sc + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * lifespan.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_. ses.sc
temptrend_abs.sc                                 -0.478                                                 
REALMMarine                                      -0.934  0.465                                          
REALMTerrestrial                                 -0.741  0.288  0.680                                   
tsign1                                           -0.146  0.068  0.034  0.026                            
tempave.sc                                       -0.017  0.007  0.026  0.004 -0.065                     
tempave_metab.sc                                  0.112 -0.049 -0.117 -0.071 -0.010 -0.547              
seas.sc                                          -0.110  0.070  0.160 -0.073 -0.106  0.226 -0.089       
microclim.sc                                     -0.080  0.087  0.098 -0.015  0.037  0.017 -0.069  0.169
mass.sc                                          -0.007  0.052  0.022  0.050  0.018  0.006 -0.496  0.013
speed.sc                                          0.055 -0.033  0.000 -0.033 -0.049  0.067 -0.217  0.066
lifespan.sc                                       0.077 -0.060 -0.084 -0.079 -0.032 -0.048  0.639  0.030
consumerfrac.sc                                  -0.071  0.042  0.040  0.330  0.042  0.014 -0.042 -0.100
endothermfrac.sc                                  0.029 -0.005 -0.009 -0.257  0.023  0.415 -0.481  0.093
nspp.sc                                           0.023 -0.070 -0.086 -0.114 -0.036  0.016 -0.007 -0.085
npp.sc                                            0.025 -0.006 -0.048  0.037  0.009 -0.246  0.231 -0.094
veg.sc                                           -0.381  0.387  0.407  0.005 -0.005  0.139 -0.130  0.096
temptrend_abs.sc:REALMMarine                      0.464 -0.954 -0.469 -0.267 -0.020 -0.026  0.050 -0.091
temptrend_abs.sc:REALMTerrestrial                 0.283 -0.720 -0.262 -0.428 -0.011  0.000  0.026  0.119
temptrend_abs.sc:tsign1                           0.082 -0.138 -0.035 -0.012 -0.510  0.078 -0.015  0.029
temptrend_abs.sc:tempave.sc                       0.038 -0.019 -0.054 -0.007  0.062 -0.717  0.425 -0.187
temptrend_abs.sc:tempave_metab.sc                -0.045  0.059  0.048  0.037 -0.019  0.425 -0.673  0.028
temptrend_abs.sc:seas.sc                          0.068 -0.098 -0.097  0.099  0.064 -0.129  0.041 -0.738
temptrend_abs.sc:microclim.sc                     0.072 -0.116 -0.083  0.019 -0.046  0.023  0.035 -0.104
temptrend_abs.sc:mass.sc                          0.033 -0.041 -0.035 -0.047 -0.016  0.030  0.289  0.010
temptrend_abs.sc:speed.sc                        -0.051  0.053  0.023  0.056  0.037 -0.060  0.131 -0.016
                                                 mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s npp.sc
temptrend_abs.sc                                                                                        
REALMMarine                                                                                             
REALMTerrestrial                                                                                        
tsign1                                                                                                  
tempave.sc                                                                                              
tempave_metab.sc                                                                                        
seas.sc                                                                                                 
microclim.sc                                                                                            
mass.sc                                           0.015                                                 
speed.sc                                          0.062  0.112                                          
lifespan.sc                                      -0.003 -0.825 -0.385                                   
consumerfrac.sc                                  -0.023  0.069 -0.267 -0.032                            
endothermfrac.sc                                  0.049 -0.088 -0.300  0.111 -0.140                     
nspp.sc                                          -0.122 -0.171  0.015  0.167 -0.033  0.165              
npp.sc                                           -0.189 -0.032  0.046  0.029 -0.034 -0.184 -0.168       
veg.sc                                            0.032  0.046  0.048 -0.054 -0.017  0.065  0.008 -0.286
temptrend_abs.sc:REALMMarine                     -0.092 -0.053  0.004  0.058 -0.025  0.011  0.096  0.047
temptrend_abs.sc:REALMTerrestrial                 0.026 -0.060  0.040  0.051 -0.152  0.098  0.114 -0.055
temptrend_abs.sc:tsign1                          -0.033 -0.017  0.018  0.024 -0.021  0.011  0.022 -0.043
temptrend_abs.sc:tempave.sc                       0.013  0.028 -0.033  0.006 -0.010 -0.354 -0.023  0.183
temptrend_abs.sc:tempave_metab.sc                -0.006  0.293  0.089 -0.371  0.066  0.370 -0.006 -0.172
temptrend_abs.sc:seas.sc                         -0.125  0.002 -0.026 -0.027  0.089 -0.059  0.069  0.083
temptrend_abs.sc:microclim.sc                    -0.813 -0.004 -0.036  0.002  0.009 -0.025  0.074  0.192
temptrend_abs.sc:mass.sc                          0.017 -0.596 -0.044  0.507 -0.051  0.058  0.114 -0.015
temptrend_abs.sc:speed.sc                        -0.030 -0.061 -0.608  0.192  0.182  0.164 -0.045  0.001
                                                 veg.sc t_.:REALMM t_.:REALMT tm_.:1 tmptrnd_bs.sc:t.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                     -0.417                                              
temptrend_abs.sc:REALMTerrestrial                 0.019  0.665                                       
temptrend_abs.sc:tsign1                          -0.021  0.049      0.014                            
temptrend_abs.sc:tempave.sc                      -0.133  0.045     -0.012     -0.101                 
temptrend_abs.sc:tempave_metab.sc                 0.095 -0.060     -0.056      0.029 -0.454          
temptrend_abs.sc:seas.sc                         -0.095  0.138     -0.175     -0.045  0.263          
temptrend_abs.sc:microclim.sc                    -0.052  0.126     -0.043      0.031 -0.023          
temptrend_abs.sc:mass.sc                         -0.014  0.049      0.086      0.021 -0.045          
temptrend_abs.sc:speed.sc                        -0.042 -0.007     -0.034     -0.014  0.090          
                                                 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                         -0.042                                     
temptrend_abs.sc:microclim.sc                     0.058   0.170                             
temptrend_abs.sc:mass.sc                         -0.521  -0.043            -0.039           
temptrend_abs.sc:speed.sc                        -0.261   0.070             0.040           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                         0.125                                              
                                                 tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                 t-1:_. ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                 
REALMMarine                                                                                      
REALMTerrestrial                                                                                 
tsign1                                                                                           
tempave.sc                                                                                       
tempave_metab.sc                                                                                 
seas.sc                                                                                          
microclim.sc                                                                                     
mass.sc                                                                                          
speed.sc                                                                                         
lifespan.sc                                                                                      
consumerfrac.sc                                                                                  
endothermfrac.sc                                                                                 
nspp.sc                                                                                          
npp.sc                                                                                           
veg.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                
temptrend_abs.sc:tsign1                                                                          
temptrend_abs.sc:tempave.sc                                                                      
temptrend_abs.sc:tempave_metab.sc                                                                
temptrend_abs.sc:seas.sc                                                                         
temptrend_abs.sc:microclim.sc                                                                    
temptrend_abs.sc:mass.sc                                                                         
temptrend_abs.sc:speed.sc                                                                        
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-8.38808782 -0.33122885 -0.03014344  0.33937884  8.28289240 

Number of Observations: 31072
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   218                  31072 
summary(modTfullHornrem0)
Linear mixed-effects model fit by REML
 Data: trends[i3, ] 

Random effects:
 Formula: ~temptrend_abs.sc | STUDY_ID
 Structure: General positive-definite, Log-Cholesky parametrization
                 StdDev     Corr  
(Intercept)      0.01569909 (Intr)
temptrend_abs.sc 0.02631579 0.237 

 Formula: ~1 | rarefyID %in% STUDY_ID
        (Intercept) Residual
StdDev:  0.01343706 2.039905

Variance function:
 Structure: Power of variance covariate
 Formula: ~nyrBT 
 Parameter estimates:
    power 
-2.179888 
Fixed effects: Horntrendrem0 ~ temptrend_abs.sc * REALM + temptrend_abs.sc *      tsign + temptrend_abs.sc * tempave.sc + temptrend_abs.sc *      tempave_metab.sc + temptrend_abs.sc * seas.sc + temptrend_abs.sc *      microclim.sc + temptrend_abs.sc * mass.sc + temptrend_abs.sc *      speed.sc + temptrend_abs.sc * lifespan.sc + temptrend_abs.sc *      consumerfrac.sc + temptrend_abs.sc * endothermfrac.sc + temptrend_abs.sc *      nspp.sc + temptrend_abs.sc * thermal_bias.sc:tsign + temptrend_abs.sc *      npp.sc + temptrend_abs.sc * veg.sc + temptrend_abs.sc * human_bowler.sc:REALM2 
 Correlation: 
                                                 (Intr) tmpt_. REALMM REALMT tsign1 tmpv.s tmpv_. ses.sc
temptrend_abs.sc                                 -0.438                                                 
REALMMarine                                      -0.942  0.425                                          
REALMTerrestrial                                 -0.717  0.272  0.656                                   
tsign1                                           -0.095  0.060  0.014  0.023                            
tempave.sc                                       -0.036  0.014  0.042  0.012 -0.061                     
tempave_metab.sc                                  0.103 -0.038 -0.100 -0.082 -0.013 -0.662              
seas.sc                                          -0.121  0.053  0.165 -0.099 -0.110  0.213 -0.074       
microclim.sc                                     -0.059  0.048  0.071 -0.017  0.031 -0.034 -0.041  0.086
mass.sc                                          -0.011  0.037  0.026  0.054  0.018  0.012 -0.444  0.018
speed.sc                                          0.043 -0.028  0.007 -0.004 -0.052  0.097 -0.214  0.063
lifespan.sc                                       0.066 -0.045 -0.071 -0.091 -0.028 -0.068  0.589  0.034
consumerfrac.sc                                  -0.039  0.034  0.014  0.296  0.046  0.028 -0.063 -0.117
endothermfrac.sc                                  0.023 -0.004 -0.009 -0.236  0.021  0.518 -0.551  0.084
nspp.sc                                           0.011 -0.066 -0.061 -0.107 -0.007  0.042 -0.014 -0.020
npp.sc                                            0.032  0.013 -0.047  0.061 -0.005 -0.240  0.209 -0.205
veg.sc                                           -0.477  0.315  0.495  0.019 -0.012  0.128 -0.102  0.111
temptrend_abs.sc:REALMMarine                      0.427 -0.953 -0.430 -0.254 -0.020 -0.026  0.035 -0.066
temptrend_abs.sc:REALMTerrestrial                 0.248 -0.695 -0.230 -0.416 -0.007 -0.007  0.038  0.147
temptrend_abs.sc:tsign1                           0.055 -0.120 -0.018 -0.002 -0.517  0.056 -0.013  0.012
temptrend_abs.sc:tempave.sc                       0.041 -0.032 -0.053 -0.020  0.055 -0.610  0.405 -0.103
temptrend_abs.sc:tempave_metab.sc                -0.040  0.042  0.037  0.044 -0.016  0.396 -0.626 -0.013
temptrend_abs.sc:seas.sc                          0.060 -0.096 -0.082  0.125  0.057 -0.096  0.017 -0.661
temptrend_abs.sc:microclim.sc                     0.026 -0.062 -0.033  0.015 -0.052  0.052  0.003 -0.032
temptrend_abs.sc:mass.sc                          0.026 -0.038 -0.028 -0.039 -0.011  0.028  0.250 -0.003
temptrend_abs.sc:speed.sc                        -0.026  0.046  0.004  0.032  0.034 -0.054  0.118 -0.004
                                                 mcrcl. mss.sc spd.sc lfspn. cnsmr. endth. nspp.s npp.sc
temptrend_abs.sc                                                                                        
REALMMarine                                                                                             
REALMTerrestrial                                                                                        
tsign1                                                                                                  
tempave.sc                                                                                              
tempave_metab.sc                                                                                        
seas.sc                                                                                                 
microclim.sc                                                                                            
mass.sc                                           0.013                                                 
speed.sc                                          0.058  0.153                                          
lifespan.sc                                       0.007 -0.826 -0.394                                   
consumerfrac.sc                                  -0.021  0.040 -0.192 -0.052                            
endothermfrac.sc                                  0.030 -0.080 -0.254  0.082 -0.140                     
nspp.sc                                          -0.069 -0.191  0.010  0.181 -0.017  0.162              
npp.sc                                           -0.244 -0.032  0.036  0.026 -0.001 -0.170 -0.200       
veg.sc                                            0.008  0.020  0.024 -0.022 -0.008  0.077  0.019 -0.205
temptrend_abs.sc:REALMMarine                     -0.054 -0.038 -0.001  0.042 -0.024  0.014  0.084  0.016
temptrend_abs.sc:REALMTerrestrial                 0.027 -0.055  0.024  0.053 -0.133  0.087  0.111 -0.076
temptrend_abs.sc:tsign1                          -0.029 -0.014  0.021  0.018 -0.014  0.004  0.011 -0.034
temptrend_abs.sc:tempave.sc                       0.058  0.035 -0.050  0.014 -0.031 -0.323 -0.030  0.139
temptrend_abs.sc:tempave_metab.sc                -0.014  0.272  0.106 -0.359  0.069  0.354  0.007 -0.142
temptrend_abs.sc:seas.sc                         -0.074 -0.002 -0.026 -0.028  0.096 -0.041  0.035  0.126
temptrend_abs.sc:microclim.sc                    -0.723  0.006 -0.030 -0.008  0.005 -0.001  0.044  0.181
temptrend_abs.sc:mass.sc                          0.006 -0.592 -0.064  0.495 -0.032  0.051  0.108 -0.011
temptrend_abs.sc:speed.sc                        -0.029 -0.071 -0.584  0.197  0.124  0.134 -0.048 -0.011
                                                 veg.sc t_.:REALMM t_.:REALMT tm_.:1 tmptrnd_bs.sc:t.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                     -0.335                                              
temptrend_abs.sc:REALMTerrestrial                 0.027  0.639                                       
temptrend_abs.sc:tsign1                          -0.007  0.041      0.005                            
temptrend_abs.sc:tempave.sc                      -0.111  0.050      0.024     -0.107                 
temptrend_abs.sc:tempave_metab.sc                 0.066 -0.035     -0.081      0.036 -0.503          
temptrend_abs.sc:seas.sc                         -0.102  0.130     -0.222     -0.034  0.156          
temptrend_abs.sc:microclim.sc                     0.020  0.073     -0.048      0.027 -0.108          
temptrend_abs.sc:mass.sc                         -0.003  0.043      0.083      0.023 -0.073          
temptrend_abs.sc:speed.sc                        -0.032  0.003     -0.024     -0.010  0.106          
                                                 tm_.:_. tmptrnd_bs.sc:ss. tmptrnd_bs.sc:mc.
temptrend_abs.sc                                                                            
REALMMarine                                                                                 
REALMTerrestrial                                                                            
tsign1                                                                                      
tempave.sc                                                                                  
tempave_metab.sc                                                                            
seas.sc                                                                                     
microclim.sc                                                                                
mass.sc                                                                                     
speed.sc                                                                                    
lifespan.sc                                                                                 
consumerfrac.sc                                                                             
endothermfrac.sc                                                                            
nspp.sc                                                                                     
npp.sc                                                                                      
veg.sc                                                                                      
temptrend_abs.sc:REALMMarine                                                                
temptrend_abs.sc:REALMTerrestrial                                                           
temptrend_abs.sc:tsign1                                                                     
temptrend_abs.sc:tempave.sc                                                                 
temptrend_abs.sc:tempave_metab.sc                                                           
temptrend_abs.sc:seas.sc                          0.012                                     
temptrend_abs.sc:microclim.sc                     0.092   0.098                             
temptrend_abs.sc:mass.sc                         -0.471  -0.025            -0.024           
temptrend_abs.sc:speed.sc                        -0.253   0.062             0.033           
                                                 tmptrnd_bs.sc:ms. tmptrnd_bs.sc:sp. tmptrnd_bs.sc:l.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                         0.125                                              
                                                 tmptrnd_bs.sc:c. tmptrnd_bs.sc:nd. tmptrnd_bs.sc:ns.
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
                                                 t-1:_. ts1:_. tmptrnd_bs.sc:np. tmptrnd_bs.sc:v.
temptrend_abs.sc                                                                                 
REALMMarine                                                                                      
REALMTerrestrial                                                                                 
tsign1                                                                                           
tempave.sc                                                                                       
tempave_metab.sc                                                                                 
seas.sc                                                                                          
microclim.sc                                                                                     
mass.sc                                                                                          
speed.sc                                                                                         
lifespan.sc                                                                                      
consumerfrac.sc                                                                                  
endothermfrac.sc                                                                                 
nspp.sc                                                                                          
npp.sc                                                                                           
veg.sc                                                                                           
temptrend_abs.sc:REALMMarine                                                                     
temptrend_abs.sc:REALMTerrestrial                                                                
temptrend_abs.sc:tsign1                                                                          
temptrend_abs.sc:tempave.sc                                                                      
temptrend_abs.sc:tempave_metab.sc                                                                
temptrend_abs.sc:seas.sc                                                                         
temptrend_abs.sc:microclim.sc                                                                    
temptrend_abs.sc:mass.sc                                                                         
temptrend_abs.sc:speed.sc                                                                        
                                                 h_.:REALM2T h_.:REALM2M t_.:-1 t_.:1: t_.:_.:REALM2T
temptrend_abs.sc                                                                                     
REALMMarine                                                                                          
REALMTerrestrial                                                                                     
tsign1                                                                                               
tempave.sc                                                                                           
tempave_metab.sc                                                                                     
seas.sc                                                                                              
microclim.sc                                                                                         
mass.sc                                                                                              
speed.sc                                                                                             
lifespan.sc                                                                                          
consumerfrac.sc                                                                                      
endothermfrac.sc                                                                                     
nspp.sc                                                                                              
npp.sc                                                                                               
veg.sc                                                                                               
temptrend_abs.sc:REALMMarine                                                                         
temptrend_abs.sc:REALMTerrestrial                                                                    
temptrend_abs.sc:tsign1                                                                              
temptrend_abs.sc:tempave.sc                                                                          
temptrend_abs.sc:tempave_metab.sc                                                                    
temptrend_abs.sc:seas.sc                                                                             
temptrend_abs.sc:microclim.sc                                                                        
temptrend_abs.sc:mass.sc                                                                             
temptrend_abs.sc:speed.sc                                                                            
 [ reached getOption("max.print") -- omitted 14 rows ]

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-5.79037325 -0.27332859 -0.02733247  0.28919907  5.91687491 

Number of Observations: 30392
Number of Groups: 
              STUDY_ID rarefyID %in% STUDY_ID 
                   190                  30392 

Plots from the full models

Plot the coefficients

Plot interactions (Jaccard turnover)

# set up the interactions to plot
ints <- data.frame(vars = c('tsign', 'tempave', 'tempave_metab', 'seas', 'microclim', 'mass', 'speed', 'lifespan', 'consumerfrac', 'endothermfrac', 'nspp', 'thermal_bias', 'npp', 'veg', 'human_bowler', 'human_bowler'),
           min = c(1, -10, 10, 0.1, 0, 0, 0, 0.3, 0, 0, 0.3, -10, 1.9, 0, 0, 0), 
           max = c(2, 30, 40, 16, 6, 8, 2, 2, 1, 1, 2.6, 10, 3.7, 1, 9, 9),
           log = c(F, F, F, F, F, T, T, T, F, F, T, F, T, F, F, F),
           len = c(2, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100),
           discrete = c(T, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F),
           REALM = c(rep('Freshwater', 15), 'Marine'),
           REALM2 = c(rep('TerrFresh', 15), 'Marine'),
           stringsAsFactors = FALSE)
basetab <- data.frame(tempave.sc = 0, tempave_metab.sc = 0, 
                      seas.sc = 0, microclim.sc = 0, mass.sc = 0, 
                      speed.sc = 0, lifespan.sc = 0, endothermfrac.sc = 0, 
                      nspp.sc = 0, thermal_bias.sc = 0, npp.sc = 0, human_bowler.sc = 0, veg.sc = 0,
                      consumerfrac.sc = 0,
                      nyrBT = 20, STUDY_ID = 127L, rarefyID = '127_514668')

# make the data frames for each interaction to plot                
for(j in 1:nrow(ints)){
  # set up a grid of temperature trends and the interacting variable
  if(ints$log[j]) intvars <- list(temptrend = seq(-1.5, 1.5, length.out = 100), 
                                  new = 10^seq(ints$min[j], ints$max[j], length.out = ints$len[j]),
                                   var = ints$vars[j])
  if(!ints$log[j]) intvars <- list(temptrend = seq(-1.5, 1.5, length.out = 100), 
                                   new = seq(ints$min[j], ints$max[j], length.out = ints$len[j]),
                                   var = ints$vars[j])
  names(intvars) <- c('temptrend', ints$vars[j], 'var')
  thisdat <- expand.grid(intvars)
  
  # scale the interacting variable
  cent <- attr(trends[[paste0(ints$var[j], '.sc')]], 'scaled:center')
  scl <- attr(trends[[paste0(ints$var[j], '.sc')]], 'scaled:scale')
  if(!is.null(cent) & !is.null(scl)){
    if(ints$log[j]) thisdat[[paste0(ints$var[j], '.sc')]] <- (log(thisdat[[ints$var[j]]]) - cent)/scl
    if(!ints$log[j]) thisdat[[paste0(ints$var[j], '.sc')]] <- (thisdat[[ints$var[j]]] - cent)/scl
  }

  # merge with the rest of the columns
  if(ints$var[j] != 'tsign') colnamestouse <- setdiff(colnames(basetab), paste0(ints$var[j], '.sc'))
  if(ints$var[j] == 'tsign') colnamestouse <- setdiff(colnames(basetab), ints$var[j])
  thisdat <- cbind(thisdat, basetab[, colnamestouse])

  # add realm
  thisdat$REALM <- ints$REALM[j]
  thisdat$REALM2 <- ints$REALM2[j]
  
  # merge with the previous iterations
  if(j == 1) newdat <- thisdat
  if(j > 1){
    colstoadd <- setdiff(colnames(thisdat), colnames(newdat))
    for(toadd in colstoadd){
      newdat[[toadd]] <- NA
    }
    
    colstoadd2 <- setdiff(colnames(newdat), colnames(thisdat))
    for(toadd in colstoadd2){
      thisdat[[toadd]] <- NA
    }
    
    newdat <- rbind(newdat, thisdat)
  } 
}

# character so that new levels can be added
newdat$REALM <- as.character(newdat$REALM)
newdat$REALM2 <- as.character(newdat$REALM2)

# add extra rows so that all factor levels are represented (for predict.lme to work)
newdat <- rbind(newdat[1:4, ], newdat)
newdat$REALM[1:4] <- c('Marine', 'Marine', 'Terrestrial', 'Terrestrial')
newdat$REALM2[1:4] <- c('Marine', 'Marine', 'TerrFresh', 'TerrFresh')
newdat$temptrend[1:4] <- c(-1, 1, -1, 1)

# trim to at least some temperature change (so that tsign is -1 or 1)
newdat <- newdat[newdat$temptrend != 0,]

# scale the temperature vars
newdat$temptrend.sc <- newdat$temptrend/attr(trends$temptrend.sc, 'scaled:scale') 
newdat$temptrend_abs <- abs(newdat$temptrend)
newdat$temptrend_abs.sc <- (newdat$temptrend_abs)/attr(trends$temptrend_abs.sc, 'scaled:scale')
newdat$tsign <- factor(sign(newdat$temptrend))

# make predictions
newdat$preds <- predict(object = modTfull1, newdata = newdat, level = 0)

#remove the extra rows
newdat <- newdat[5:nrow(newdat), ]

# prep the plots
intplots <- vector('list', nrow(ints))
for(j in 1:length(intplots)){
  subs <- newdat$var == ints$vars[j] & newdat$temptrend > 0 # select warming side
  xvar <- 'temptrend_abs'
  title <- ints$vars[j]
  if(ints$vars[j] %in% c('tsign')){
    subs <- newdat$var == ints$vars[j]
  } 
  if(ints$vars[j] %in% c('thermal_bias')){
    subs <- newdat$var == ints$vars[j]
    xvar <- 'temptrend'
  } 
  if(ints$vars[j] %in% c('human_bowler')){
    subs <- newdat$var == ints$vars[j] & newdat$temptrend > 0 & newdat$REALM2 == ints$REALM2[j]
    title <- paste0('human:', ints$REALM2[j])
  } 

  thisplot <- ggplot(newdat[subs, ], 
                     aes_string(x = xvar, y = 'preds', 
                                group = ints$vars[j], 
                                color = ints$vars[j])) +
    geom_line() +
    coord_cartesian(ylim = c(0, 1)) +
    theme(plot.margin = unit(c(0.5,0,0.5,0), 'cm')) +
    labs(title = title)
  if(ints$log[j] & !ints$discrete[j]){
    intplots[[j]] <- thisplot + scale_color_distiller(palette = "YlGnBu", trans = 'log')
  }
  if(!ints$log[j] & !ints$discrete[j]){
    intplots[[j]] <- thisplot + scale_color_distiller(palette = "YlGnBu", trans = 'identity')
  }
  if(ints$discrete[j]){
    intplots[[j]] <- thisplot + scale_color_brewer(palette = "Dark2")
  }
}

#grid.arrange(grobs = intplots, '+', theme(plot.margin = unit(c(0,0,0,0), 'cm'))), ncol=2)
#do.call('grid.arrange', c(intplots, ncol = 2))
grid.arrange(grobs = intplots, ncol = 3)

Positive thermal bias means that the species in the assemblage have warmer thermal niches than the environment (and vice versa).

Plot interactions (Jaccard turnover) without year 1

# set up the interactions to plot
ints <- data.frame(vars = c('tsign', 'tempave', 'tempave_metab', 'seas', 'microclim', 'mass', 'speed', 'lifespan', 'consumerfrac', 'endothermfrac', 'nspp', 'thermal_bias', 'npp', 'veg', 'human_bowler', 'human_bowler'),
           min = c(1, -10, 10, 0.1, 0, 0, 0, 0.3, 0, 0, 0.3, -10, 1.9, 0, 0, 0), 
           max = c(2, 30, 40, 16, 6, 8, 2, 2, 1, 1, 2.6, 10, 3.7, 1, 9, 9),
           log = c(F, F, F, F, F, T, T, T, F, F, T, F, T, F, F, F),
           len = c(2, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100),
           discrete = c(T, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F),
           REALM = c(rep('Freshwater', 15), 'Marine'),
           REALM2 = c(rep('TerrFresh', 15), 'Marine'),
           stringsAsFactors = FALSE)
basetab <- data.frame(tempave.sc = 0, tempave_metab.sc = 0, 
                      seas.sc = 0, microclim.sc = 0, mass.sc = 0, 
                      speed.sc = 0, lifespan.sc = 0, endothermfrac.sc = 0, 
                      nspp.sc = 0, thermal_bias.sc = 0, npp.sc = 0, human_bowler.sc = 0, veg.sc = 0,
                      consumerfrac.sc = 0,
                      nyrBT = 20, STUDY_ID = 127L, rarefyID = '127_514668')

# make the data frames for each interaction to plot                
for(j in 1:nrow(ints)){
  # set up a grid of temperature trends and the interacting variable
  if(ints$log[j]) intvars <- list(temptrend = seq(-1.5, 1.5, length.out = 100), 
                                  new = 10^seq(ints$min[j], ints$max[j], length.out = ints$len[j]),
                                   var = ints$vars[j])
  if(!ints$log[j]) intvars <- list(temptrend = seq(-1.5, 1.5, length.out = 100), 
                                   new = seq(ints$min[j], ints$max[j], length.out = ints$len[j]),
                                   var = ints$vars[j])
  names(intvars) <- c('temptrend', ints$vars[j], 'var')
  thisdat <- expand.grid(intvars)
  
  # scale the interacting variable
  cent <- attr(trends[[paste0(ints$var[j], '.sc')]], 'scaled:center')
  scl <- attr(trends[[paste0(ints$var[j], '.sc')]], 'scaled:scale')
  if(!is.null(cent) & !is.null(scl)){
    if(ints$log[j]) thisdat[[paste0(ints$var[j], '.sc')]] <- (log(thisdat[[ints$var[j]]]) - cent)/scl
    if(!ints$log[j]) thisdat[[paste0(ints$var[j], '.sc')]] <- (thisdat[[ints$var[j]]] - cent)/scl
  }

  # merge with the rest of the columns
  if(ints$var[j] != 'tsign') colnamestouse <- setdiff(colnames(basetab), paste0(ints$var[j], '.sc'))
  if(ints$var[j] == 'tsign') colnamestouse <- setdiff(colnames(basetab), ints$var[j])
  thisdat <- cbind(thisdat, basetab[, colnamestouse])

  # add realm
  thisdat$REALM <- ints$REALM[j]
  thisdat$REALM2 <- ints$REALM2[j]
  
  # merge with the previous iterations
  if(j == 1) newdat <- thisdat
  if(j > 1){
    colstoadd <- setdiff(colnames(thisdat), colnames(newdat))
    for(toadd in colstoadd){
      newdat[[toadd]] <- NA
    }
    
    colstoadd2 <- setdiff(colnames(newdat), colnames(thisdat))
    for(toadd in colstoadd2){
      thisdat[[toadd]] <- NA
    }
    
    newdat <- rbind(newdat, thisdat)
  } 
}

# character so that new levels can be added
newdat$REALM <- as.character(newdat$REALM)
newdat$REALM2 <- as.character(newdat$REALM2)

# add extra rows so that all factor levels are represented (for predict.lme to work)
newdat <- rbind(newdat[1:4, ], newdat)
newdat$REALM[1:4] <- c('Marine', 'Marine', 'Terrestrial', 'Terrestrial')
newdat$REALM2[1:4] <- c('Marine', 'Marine', 'TerrFresh', 'TerrFresh')
newdat$temptrend[1:4] <- c(-1, 1, -1, 1)

# trim to at least some temperature change (so that tsign is -1 or 1)
newdat <- newdat[newdat$temptrend != 0,]

# scale the temperature vars
newdat$temptrend.sc <- newdat$temptrend/attr(trends$temptrend.sc, 'scaled:scale') 
newdat$temptrend_abs <- abs(newdat$temptrend)
newdat$temptrend_abs.sc <- (newdat$temptrend_abs)/attr(trends$temptrend_abs.sc, 'scaled:scale')
newdat$tsign <- factor(sign(newdat$temptrend))

# make predictions
newdat$preds <- predict(object = modTfullrem0, newdata = newdat, level = 0)

#remove the extra rows
newdat <- newdat[5:nrow(newdat), ]

# prep the plots
intplots <- vector('list', nrow(ints))
for(j in 1:length(intplots)){
  subs <- newdat$var == ints$vars[j] & newdat$temptrend > 0 # select warming side
  xvar <- 'temptrend_abs'
  title <- ints$vars[j]
  if(ints$vars[j] %in% c('tsign')){
    subs <- newdat$var == ints$vars[j]
  } 
  if(ints$vars[j] %in% c('thermal_bias')){
    subs <- newdat$var == ints$vars[j]
    xvar <- 'temptrend'
  } 
  if(ints$vars[j] %in% c('human_bowler')){
    subs <- newdat$var == ints$vars[j] & newdat$temptrend > 0 & newdat$REALM2 == ints$REALM2[j]
    title <- paste0('human:', ints$REALM2[j])
  } 

  thisplot <- ggplot(newdat[subs, ], 
                     aes_string(x = xvar, y = 'preds', 
                                group = ints$vars[j], 
                                color = ints$vars[j])) +
    geom_line() +
    coord_cartesian(ylim = c(-0.6, 0.6)) +
    theme(plot.margin = unit(c(0.5,0,0.5,0), 'cm')) +
    labs(title = title)
  if(ints$log[j] & !ints$discrete[j]){
    intplots[[j]] <- thisplot + scale_color_distiller(palette = "YlGnBu", trans = 'log')
  }
  if(!ints$log[j] & !ints$discrete[j]){
    intplots[[j]] <- thisplot + scale_color_distiller(palette = "YlGnBu", trans = 'identity')
  }
  if(ints$discrete[j]){
    intplots[[j]] <- thisplot + scale_color_brewer(palette = "Dark2")
  }
}

#grid.arrange(grobs = intplots, '+', theme(plot.margin = unit(c(0,0,0,0), 'cm'))), ncol=2)
#do.call('grid.arrange', c(intplots, ncol = 2))
grid.arrange(grobs = intplots, ncol = 3)

Plot residuals against each predictor (Jaccard turnover)

resids <- resid(modTfull1)
preds <- getData(modTfull1)
col = '#00000033'
cex = 0.5
par(mfrow = c(5,4))
boxplot(resids ~ preds$REALM, cex = cex, col = col)
plot(preds$temptrend_abs.sc, resids, cex = cex, col = col)
plot(preds$tsign, resids, cex = cex, col = col)
plot(preds$tempave.sc, resids, cex = cex, col = col)
plot(preds$tempave_metab.sc, resids, cex = cex, col = col)
plot(preds$seas.sc, resids, cex = cex, col = col)
plot(preds$microclim.sc, resids, cex = cex, col = col)
plot(preds$mass.sc, resids, cex = cex, col = col)
plot(preds$speed.sc, resids, cex = cex, col = col)
plot(preds$lifespan.sc, resids, cex = cex, col = col)
plot(preds$consumerfrac.sc, resids, cex = cex, col = col)
plot(preds$endothermfrac.sc, resids, cex = cex, col = col)
plot(preds$nspp.sc, resids, cex = cex, col = col)
plot(preds$thermal_bias.sc, resids, cex = cex, col = col)
plot(preds$npp.sc, resids, cex = cex, col = col)
plot(preds$veg.sc, resids, cex = cex, col = col)
plot(preds$human_bowler.sc, resids, cex = cex, col = col)

Remove each term from the full model

Jaccard turnover

Jbeta and Horn models


if(file.exists('output/aics_from_full.csv')){
  aicsfromfull <- read.csv('output/aics_from_full.csv')
  
  if(all(c('dAIC_Jbeta', 'dAIC_Horn') %in% colnames(aicsfromfull))){
    runJbetaHorn <- FALSE
  } else {
    runJbetaHorn <- TRUE
  }
} else {
  runJbetaHorn <- TRUE
}

if(runJbetaHorn){
  i <- trends[, complete.cases(Jbetatrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                               temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                               consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]
  i2 <- trends[, complete.cases(Horntrend, REALM, tempave.sc, tempave_metab.sc, seas.sc, microclim.sc, 
                               temptrend_abs.sc, mass.sc, speed.sc, lifespan.sc, 
                               consumerfrac.sc, endothermfrac.sc, nspp.sc, thermal_bias.sc, npp.sc, veg.sc, human_bowler.sc)]
  
  randef <- list(STUDY_ID = ~ temptrend_abs.sc, rarefyID = ~1)
  varef <- varPower(-0.5, ~nyrBT)
  
  terms <- c('temptrend_abs.sc*REALM', 
             'temptrend_abs.sc*tsign',
             'temptrend_abs.sc*tempave.sc',
             'temptrend_abs.sc*tempave_metab.sc',
             'temptrend_abs.sc*seas.sc',
             'temptrend_abs.sc*microclim.sc',
             'temptrend_abs.sc*mass.sc',
             'temptrend_abs.sc*speed.sc', 
             'temptrend_abs.sc*lifespan.sc', 
             'temptrend_abs.sc*consumerfrac.sc',
             'temptrend_abs.sc*endothermfrac.sc',
             'temptrend_abs.sc*nspp.sc',
             'temptrend_abs.sc*thermal_bias.sc:tsign',
             'temptrend_abs.sc*npp.sc',
             'temptrend_abs.sc*veg.sc',
             'temptrend_abs.sc*human_bowler.sc:REALM2')
  
  modTJbetadrops <- vector('list', length(terms)+2)
  modTHorndrops <- vector('list', length(terms)+2)

  names(modTJbetadrops) <- c('full', '-temptrend_abs.sc', paste0('-', terms))
  names(modTHorndrops) <- c('full', '-temptrend_abs.sc', paste0('-', terms))
  
  # fit full model with ML for model comparison
  modTJbetadrops[[1]] <- lme(formula(paste0('Jbetatrend ~ ', paste(terms, collapse = ' + '))),
                        random = randef, weights = varef, data = trends[i,], method = 'ML')
  modTHorndrops[[1]] <- lme(formula(paste0('Horntrend ~ ', paste(terms, collapse = ' + '))),
                        random = randef, weights = varef, data = trends[i2,], method = 'ML')
  
  # w/out temptrend
  modTJbetadrops[[2]] <- lme(formula(paste0('Jbetatrend ~ ', paste(gsub('temptrend_abs.sc\\*', '', terms), collapse = ' + '))),
                        random = list(STUDY_ID = ~ 1, rarefyID = ~1), weights = varef, data = trends[i,], method = 'ML')
  modTHorndrops[[2]] <- lme(formula(paste0('Horntrend ~ ', paste(gsub('temptrend_abs.sc\\*', '', terms), collapse = ' + '))),
                        random = list(STUDY_ID = ~ 1, rarefyID = ~1), weights = varef, data = trends[i2,], method = 'ML')
  
  for(j in 1:length(terms)){
    print(j)
    modTJbetadrops[[j+2]] <- lme(formula(paste0('Jbetatrend ~ ', paste(terms[-j], collapse = ' + '))),
                                 random = randef, weights = varef, data = trends[i,], method = 'ML', 
                                 control = lmeContrl(returnObject = TRUE)) # return fitted object even if a convergence error
    modTHorndrops[[j+2]] <- lme(formula(paste0('Horntrend ~ ', paste(terms[-j], collapse = ' + '))),
                            random = randef, weights = varef, data = trends[i2,], method = 'ML')
  }
  
  aicsJbeta <- sapply(modTJbetadrops, AIC)
  aicsHorn <- sapply(modTHorndrops, AIC)

  if(exists('aicsfromfull')){
    aicsfromfull$dAIC_Jbeta <- aicsJbeta - aicsJbeta[1]
    aicsfromfull$dAIC_Horn <- aicsHorn - aicsHorn[1]
  } else {
    aicsfromfull <- data.frame(mod = names(aics), 
                               dAIC_Jbeta = aicsJbeta - aicsJbeta[1],
                               dAIC_Horn <- aicsHorn - aicsHorn[1])
  }
  
  write.csv(aicsfromfull, file = 'output/aics_from_full.csv', row.names = FALSE)
}

aicsfromfull

Plot deltaAICs for all 3 models

# transform for a plot
aicsfromfulllong <- reshape(aicsfromfull, direction = 'long',
                            varying = c('dAIC_Jtu', 'dAIC_Jbeta', 'dAIC_Horn'),
                            v.names = 'dAIC',
                            idvar = 'mod',
                            timevar = 'type',
                            times = c('Jtu', 'Jbeta', 'Horn'))

trans = function(x) sign(x)*sqrt(abs(x))
aicsfromfulllong$dAIC_tr <- trans(aicsfromfulllong$dAIC)

# plot
xlims <- range(aicsfromfulllong$dAIC_tr)
xticks <- c(-10, 0, 10, 100, 1000, 10000)
par(mai = c(0.5, 3, 0.1, 0.1))
with(aicsfromfulllong[aicsfromfulllong$type == 'Jtu',], plot(dAIC_tr, nrow(aicsfromfull):1, 
                                                           col = 'light grey', xlim = xlims, yaxt = 'n', ylab = '', xaxt = 'n'))
with(aicsfromfulllong[aicsfromfulllong$type == 'Jbeta',], points(dAIC_tr, nrow(aicsfromfull):1 - 0.1, col = 'dark grey'))
with(aicsfromfulllong[aicsfromfulllong$type == 'Horn',], points(dAIC_tr, nrow(aicsfromfull):1 - 0.2, col = 'black'))
axis(2, at = nrow(aicsfromfull):1, labels = aicsfromfull$mod, las = 1, cex.axis = 0.7)
axis(1, at = trans(xticks), labels = xticks, cex.axis = 0.5)
abline(v = 0, lty =2, col = 'grey')

Light grey is for Jaccard turnover, dark grey is for Jaccard total, black is for Morisita-Horn

Plot interaction coefficients from all full models

# fig.width = 3, fig.height = 5, out.height=2.5, out.width=3, fig.retina =3 for macbook screen
# double that for external monitor
coefs <- as.data.table(summary(modTfull1)$tTable)
coefs2 <- as.data.table(summary(modTfullJbeta)$tTable)
coefs3 <- as.data.table(summary(modTfullHorn)$tTable)
coefs4 <- as.data.table(summary(modTfullrem0)$tTable)
coefs5 <- as.data.table(summary(modTfullJbetarem0)$tTable)
coefs6 <- as.data.table(summary(modTfullHornrem0)$tTable)

coefs$mod <- 'Jtu'
coefs2$mod <- 'Jbeta'
coefs3$mod <- 'Horn'
coefs4$mod <- 'Jtu rem0'
coefs5$mod <- 'Jbeta rem0'
coefs6$mod <- 'Horn rem0'

coefs$var <- rownames(summary(modTfull1)$tTable)
coefs2$var <- rownames(summary(modTfullJbeta)$tTable)
coefs3$var <- rownames(summary(modTfullHorn)$tTable)
coefs4$var <- rownames(summary(modTfullrem0)$tTable)
coefs5$var <- rownames(summary(modTfullJbetarem0)$tTable)
coefs6$var <- rownames(summary(modTfullHornrem0)$tTable)

# extract temperature effects and bind model coefs together
cols <- c('var', 'Value', 'Std.Error', 'mod')

allcoefsfull <- rbind(coefs[grep('temptrend|REALM', var), ..cols], 
                      coefs2[grep('temptrend|REALM', var), ..cols], 
                      coefs3[grep('temptrend|REALM', var), ..cols],
                      coefs4[grep('temptrend|REALM', var), ..cols],
                      coefs5[grep('temptrend|REALM', var), ..cols],
                      coefs6[grep('temptrend|REALM', var), ..cols])
allcoefsfull$var[allcoefsfull$var == 'temptrend_abs.sc'] <- 'temptrend_abs.sc:REALMFreshwater'

# add average temperature effect (across realms) to realm-specific temperature effects
meantempeffect <- allcoefsfull[var == 'temptrend_abs.sc:REALMFreshwater', mean(Value), by = mod]$V1
allcoefsfull[var == 'temptrend_abs.sc:REALMMarine', Value := Value + meantempeffect]
allcoefsfull[var == 'temptrend_abs.sc:REALMTerrestrial', Value := Value + meantempeffect]

# remove non-temperature effects
allcoefsfull <- allcoefsfull[grepl(':', allcoefsfull$var) & grepl('temptrend', allcoefsfull$var), ]

# add info for plotting
allcoefsfull$lCI <- allcoefsfull$Value - allcoefsfull$Std.Error # lower confidence interval
allcoefsfull$uCI <- allcoefsfull$Value + allcoefsfull$Std.Error
nvar <- nrow(allcoefsfull)/3
allcoefsfull$y <- 1:nvar + rep(c(0, 0.1, 0.2), c(nvar, nvar, nvar)) # y-values

# clean up some variable names for nicer plotting
allcoefsfull$varname <- gsub('temptrend_abs.sc:|temptrend.sc:', '', allcoefsfull$var)
allcoefsfull$varname <- gsub('REALM|REALM2', '', allcoefsfull$varname)
allcoefsfull$varname <- gsub('.sc', '', allcoefsfull$varname)
allcoefsfull$varname <- gsub('_bowler', '', allcoefsfull$varname)
allcoefsfull$varname <- gsub('tsign1', 'warming', allcoefsfull$varname)
allcoefsfull$varname <- gsub('tsign-1', 'cooling', allcoefsfull$varname)

# set x-axes
xlims1 <- c(-0.01, 0.11) # for realms
xlims2 <- c(-0.05, 0.05) # for traits
xlims3 <- c(-0.01, 0.02) # for environment
xlims4 <- c(-0.016, 0.01) # for community
xlims5 <- c(-0.006, 0.005) # for human

ddg <- 0.5 # vertical dodge for each model

# choose which variables are in which graph
set1 <- c('Terrestrial', 'Marine', 'Freshwater')
set2 <- c('mass', 'speed', 'lifespan', 'consumerfrac', 'endothermfrac', 'tempave_metab')
set3 <- c('seas', 'microclim', 'tempave')
set4 <- c('npp', 'nspp', 'tsign-1:thermal_bias', 'tsign1:thermal_bias')
set5 <- c('human:TerrFresh', 'human:Marine')

p1 <- ggplot(subset(allcoefsfull, varname %in% set1), 
                    aes(varname, Value, group = mod, color = mod)) +
  geom_hline(yintercept = 0, linetype = 'dashed', color = 'light grey') +
  geom_errorbar(aes(ymin = lCI, ymax = uCI), width = 0, position = position_dodge(ddg)) + 
  geom_point(position = position_dodge(ddg)) + 
  labs(y = 'Temperature change effect', x = '', tag = 'A') +
  scale_color_brewer(palette = 'Dark2') + 
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.position='none',
        axis.text=element_text(size=7),
        axis.title=element_text(size=7)) + 
  coord_flip(ylim = xlims1)

p2 <- ggplot(subset(allcoefsfull, varname %in% set2), 
                    aes(varname, Value, group = mod, color = mod)) +
  geom_hline(yintercept = 0, linetype = 'dashed', color = 'light grey') +
  geom_errorbar(aes(ymin = lCI, ymax = uCI), width = 0, position = position_dodge(ddg)) + 
  geom_point(position = position_dodge(ddg)) + 
  labs(y = 'Interaction with temperature change effect', x = '', tag = 'B') +
  scale_color_brewer(palette = 'Dark2') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.position='none',
        axis.text=element_text(size=7),
        axis.title=element_text(size=7)) + 
  coord_flip(ylim = xlims2)

p3 <- ggplot(subset(allcoefsfull, varname %in% set3), 
                    aes(varname, Value, group = mod, color = mod)) +
  geom_hline(yintercept = 0, linetype = 'dashed', color = 'light grey') +
  geom_errorbar(aes(ymin = lCI, ymax = uCI), width = 0, position = position_dodge(ddg)) + 
  geom_point(position = position_dodge(ddg)) + 
  labs(y = 'Interaction with temperature change effect', x = '', tag = 'C') +
  scale_color_brewer(palette = 'Dark2') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.position='none',
        axis.text=element_text(size=7),
        axis.title=element_text(size=7)) + 
  coord_flip(ylim = xlims3)

p4 <- ggplot(subset(allcoefsfull, varname %in% set4), 
                    aes(varname, Value, group = mod, color = mod)) +
  geom_hline(yintercept = 0, linetype = 'dashed', color = 'light grey') +
  geom_errorbar(aes(ymin = lCI, ymax = uCI), width = 0, position = position_dodge(ddg)) + 
  geom_point(position = position_dodge(ddg)) + 
  labs(y = 'Interaction with temperature change effect', x = '', tag = 'D') +
  scale_color_brewer(palette = 'Dark2') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.position='none',
        axis.text=element_text(size=7),
        axis.title=element_text(size=7)) + 
  coord_flip(ylim = xlims4)

p5 <- ggplot(subset(allcoefsfull, varname %in% set5), 
                    aes(varname, Value, group = mod, color = mod)) +
  geom_hline(yintercept = 0, linetype = 'dashed', color = 'light grey') +
  geom_errorbar(aes(ymin = lCI, ymax = uCI), width = 0, position = position_dodge(ddg)) + 
  geom_point(position = position_dodge(ddg)) + 
  labs(y = 'Interaction with temperature change effect', x = '', tag = 'E') +
  scale_color_brewer(palette = 'Dark2') +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"),
        legend.position='bottom',
        axis.text=element_text(size=7),
        axis.title=element_text(size=7)) + 
  coord_flip(ylim = xlims5)

grid.arrange(p1, p2, p3, p4, p5, ncol = 2, layout_matrix = rbind(c(1,2), c(3,4), c(5, NA)))

NA
NA
LS0tCnRpdGxlOiAnRHJpdmVycyBvZiB2YXJpYXRpb24gaW4gdGhlIGNvbW11bml0eSByZXNwb25zZSB0byB0ZW1wZXJhdHVyZSBjaGFuZ2UgYWNyb3NzIHJlYWxtcycKc3VidGl0bGU6ICcodXNpbmcgbWl4ZWQgZWZmZWN0cyBtb2RlbHMpJwpvdXRwdXQ6IAogICAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogICAgI2h0bWxfZG9jdW1lbnQ6IGRlZmF1bHQKICAgIGdpdGh1Yl9kb2N1bWVudDogZGVmYXVsdAotLS0KCkNvbGxhYm9yYXRvcnM6IFNoYW5lIEJsb3dlcywgSm9uIENoYXNlLCBIZWxtdXQgSGlsbGVicmFuZCwgTWljaGFlbCBCdXJyb3dzLCBBbWFuZGEgQmF0ZXMsIFVsaSBCcm9zZSwgQmVub2l0IEdhdXplbnMsIExhdXJhIEFudGFvCkFzc2lzdGFuY2U6IEthdGhlcmluZSBMZXcsIEpvc2VmIEhhdXNlcgoKIyBJbnRyb2R1Y3Rpb24KLSBDbGltYXRlIGNoYW5nZSBpcyBkcml2aW5nIGEgd2lkZXNwcmVhZCByZW9yZ2FuaXphdGlvbiBvZiBlY29sb2dpY2FsIGNvbW11bml0aWVzIGFyb3VuZCB0aGUgd29ybGQgKFBhcm1zZXNhbiAmIFlvaGUgMjAwMywgUG9sb2N6YW5za2EgZXQgYWwuIDIwMTMpLAotIGJ1dCB0aGUgaW1wYWN0cyBvZiBjbGltYXRlIGNoYW5nZSB2YXJ5IHN1YnN0YW50aWFsbHkgZnJvbSBvbmUgbG9jYXRpb24gdG8gYW5vdGhlciBhbmQgYW1vbmcgdGF4YSAoTW9saW5vcyBldCBhbC4gMjAxNiBOQ0MsIEFudGFvIGV0IGFsLiAyMDIwIE5FRSkuCi0gQ29tbXVuaXR5IHJlb3JnYW5pemF0aW9uIGlzIHN1YnN0YW50aWFsbHkgbW9yZSBjb21tb24gdGhhbiBhbiBhZ2dyZWdhdGUgbG9zcyBvciBnYWluIG9mIHNwZWNpZXMgKERvcm5lbGFzIGV0IGFsLiAyMDE0IFNjaWVuY2UsIEJsb3dlcyBldCBhbC4gMjAxOSBTY2llbmNlLCBIaWxsZWJyYW5kIGV0IGFsLiAyMDE3IEogQXBwbCBFY29sKQotIFRoZXJlIGFyZSBtYW55IGh5cG90aGVzZXMgZm9yIHdoeSBzb21lIGNvbW11bml0aWVzIGFyZSBtb3JlIHNlbnNpdGl2ZSB0byB3YXJtaW5nIHRoYW4gb3RoZXJzLCBpbmNsdWRpbmcgZGlmZmVyZW5jZXMgaW4KICAtIG1ldGFib2xpYyByYXRlcyAoRGlsbG9uIGV0IGFsLiAyMDEwIE5hdHVyZSksIAogIC0gdGhlcm1hbCBwaHlzaW9sb2d5IChEZXV0c2NoIGV0IGFsLiAyMDA4IFBOQVMsIFBpbnNreSBldCBhbC4gMjAxOSBOYXR1cmUpLCAKICAtIG1pY3JvY2xpbWF0ZSBhdmFpbGFiaWxpdHkgKEJ1cnJvd3MgZXQgYWwuIDIwMTkgTkNDLCBTdWdnaXR0IGV0IGFsLiAyMDE4IE5DQyksCiAgLSBzcGVjaWVzIG1vYmlsaXR5IChQb2xvY3phbnNrYSBldCBhbC4gMjAxMyBOQ0MsIEJ1cnJvd3MgZXQgYWwuIDIwMTEgU2NpZW5jZSwgU3VuZGF5IGV0IGFsLiAyMDEyIE5DQykKICAtIG9yIGdlbmVyYXRpb24gdGltZSAoQmVhdWdyYW5kIGV0IGFsLiAyMDA5IERTUiBJSSwgUG9sb2N6YW5za2EgZXQgYWwuIDIwMTMgTkNDKSwKICAtIGNvbnN1bWVycyB2cy4gcHJvZHVjZXJzIChQZXRjaGV5IGV0IGFsLiAxOTk5IE5hdHVyZSkKICAtIGNvbW11bml0eSBjb21wb3NpdGlvbiAoU3R1YXJ0LVNtaXRoIGV0IGFsLiAyMDE1IE5hdHVyZSwgQmVhdWdyYW5kIGV0IGEuIDIwMTUgTkNDLCBUcmlzb3MgZXQgYWwuIDIwMjAgTmF0dXJlKSwgCiAgLSBlY29zeXN0ZW0gcHJvZHVjdGl2aXR5IChUaG9tYXMgZXQgYWwuIDIwMTcgR0NCLCBCcmV0dCAxOTcxIEFtIFpvbyksCiAgLSBleHBvc3VyZSB0byBodW1hbiBpbXBhY3RzIChXaGl0ZSAmIEtlcnIgMjAwNiBFY29ncmFwaHkpCiAgLSBhbmQgYW1vbmcgcmVhbG1zIChBbnRhbyBldCBhbC4gMjAyMCBORUUpLgotIFNjYWxpbmcgdXAgZnJvbSBvcmdhbmlzbWFsIGVmZmVjdHMgdG8gd2hvbGUgZWNvbG9naWNhbCBjb21tdW5pdGllcyBpcyBjb21wbGV4LCBhbmQgeWV0IHRoZXNlIHNjYWxlcyBhcmUgY3JpdGljYWwgZm9yIGVjb3N5c3RlbSBmdW5jdGlvbmluZyBhbmQgaHVtYW4gd2VsbC1iZWluZy4gCi0gVGhlcmUgaXMgYSBuZWVkIGZvciBhIGNvbXByZWhlbnNpdmUgdGVzdCB0byB1bmRlcnN0YW5kIHdoZXJlIHdhcm1pbmcgaXMgZHJpdmluZyBhbmQgaXMgbGlrZWx5IHRvIGRyaXZlIHRoZSBtb3N0IGRyYW1hdGljIGNvbW11bml0eSB0dXJub3ZlcgoKIyBNZXRob2RzCi0gQmlvVGltZSBkYXRhc2V0LCBncmlkZGVkIHRvIDk2IGttMiBoZXhhZ29ucywgc3VtbWFyaXplZCBhcyB0ZW1wb3JhbCB0dXJub3ZlciAoQmxvd2VzKQogIC0gVGVtcG9yYWwgc2xvcGUgb2YgSmFjY2FyZCB0dXJub3ZlciBjb21wYXJlZCB0byB0aGUgZmlyc3QgeWVhcgogIC0gU2FtZSBmb3IgSmFjY2FyZCB0b3RhbAogIC0gYW5kIE1vcmlzaXRhLUhvcm4gdHVybm92ZXIKLSBFeHBsYW5hdG9yeSB2YXJpYWJsZXMgY29uc2lkZXJlZCBmb3IgZGlmZmVyZW5jZXMgaW4gcmF0ZSBvZiB0dXJub3ZlcjoKICAtIFRlbXBlcmF0dXJlIHRyZW5kIG92ZXIgdGhlIHRpbWUtZnJhbWUgb2YgZWFjaCB0aW1lLXNlcmllcyAoQ1JVIFRTIDQuMDMgb24gbGFuZCBhbmQgaW4gZnJlc2h3YXRlciwgRVJTU1QgdjUgaW4gdGhlIG9jZWFuKQogIC0gU2Vhc29uYWxpdHkgYXMgYSBtZXRyaWMgb2YgdGhlcm1hbCBzZW5zaXRpdml0eSAoRGV1dHNjaCBldCBhbC4gMjAwOCBQTkFTKS4gU3RhbmRhcmQgZGV2aWF0aW9uIG9mIG1vbnRobHkgdGVtcGVyYXR1cmVzLgogIC0gTWljcm9jbGltYXRlcyBjYWxjdWxhdGVkIGZyb20gV29ybGRDbGltIGFuZCBCaW9PcmFjbGUgKExhdXJhIEFudGFvKQogIC0gQXZlcmFnZSB0ZW1wZXJhdHVyZQogIC0gQm9keSBtYXNzLCBjb2xsYXRlZCBmcm9tIGRhdGFiYXNlcyBhbmQgbGl0ZXJhdHVyZSBzZWFyY2hlcwogIC0gTWV0YWJvbGljIHRlbXBlcmF0dXJlLCBmcm9tIGF2ZXJhZ2UgdGVtcGVyYXR1cmUgaWYgZWN0b3RoZXJtcyAoRGlsbG9uIGV0IGFsLiAyMDEwIE5hdHVyZSwgQW50YW8gZXQgYWwuIDIwMjAgTmF0IEUmRSkKICAtIE1vYmlsaXR5IGNhbGN1bGF0ZWQgZnJvbSBib2R5IG1hc3MgYW5kIHRheG9ub21pYyBncm91cCBjbGFzc2lmaWNhdGlvbnMgb2YgbW9iaWxpdHkgbW9kZSAoZmx5LCBydW4sIHN3aW0sIGNyYXdsLCBzZXNzaWxlKS4gRmx5L3J1bi9zd2ltIGZvbGxvd2VkIHRoZSBhbGxvbWV0cmljIHJlbGF0aW9uc2hpcCBpbiBIaXJ0IGV0IGFsLiAyMDE3IE5hdCBFJkUuIENyYXdsIHNldCBhdCAwLjEga20vaHIsIHNlc3NpbGUgc2V0IHRvIDAga20vaHIuIFRoZW4gY2FsY3VsYXRlZCBhdmVyYWdlZCB3aXRoaW4gZWFjaCBhc3NlbWJsYWdlLgogIC0gR2VuZXJhdGlvbiB0aW1lIGNhbGN1bGF0ZWQgZnJvbSBib2R5IG1hc3MgYW5kIGVuZG90aGVybSB2cy4gZWN0b3RoZXJtIGNsYXNzaWZpY2F0aW9ucywgZm9sbG93aW5nIE1jQ295ICYgR2lsbG9vbHkgMjAwOCBFTEUuIEF2ZXJhZ2VkIGFjcm9zcyBzcGVjaWVzIHdpdGhpbiBlYWNoIGFzc2VtYmxhZ2UuIAogIC0gQ29uc3VtZXIgdnMuIHByb2R1Y2VyIGNsYXNzaWZpY2F0aW9uIGJ5IHNwZWNpZXMKICAtIEVuZG90aGVybSB2cy4gZWN0b3RoZXJtIGNsYXNzaWZpY2F0aW9uIGJ5IHNwZWNpZXMKICAtIFNwZWNpZXMgcmljaG5lc3MsIGNhbGN1bGF0ZWQgYXMgdGhlIG51bWJlciBvZiBzcGVjaWVzIGluIHRoZSBhc3NlbWJsYWdlCiAgLSBOZXQgcHJpbWFyeSBwcm9kdWN0aXZpdHkgKE5QUCkgZnJvbSB0aGUgbWVyZ2VkIGxhbmQvb2NlYW4gcHJvZHVjdCBwcm9kdWNlZCBieSB0aGUgW09jZWFuIFByb2R1Y3Rpdml0eV0oaHR0cDovL3d3dy5zY2llbmNlLm9yZWdvbnN0YXRlLmVkdS9vY2Vhbi5wcm9kdWN0aXZpdHkvKSBncm91cCBhdCBPcmVnb24gU3RhdGUgdXNpbmcgbWV0aG9kcyBmcm9tIFpoYW8gZXQgYWwuIDIwMDUgYW5kIEJlaHJlbmZlbGQgJiBGYWxrb3dza2kgMTk5Ny4gCiAgLSBIdW1hbiBpbXBhY3QgY2FsY3VsYXRlZCBmcm9tIEJvd2xlciBldCBhbC4gMjAyMCAoYWxzbyB0cnkgZGF0YSBmcm9tIFZlbnRlciBldCBhbC4gMjAxNiBhbmQgSGFscGVybiBldCBhbC4gMjAwOCkKICAtIFRoZXJtYWwgYmlhcyBjYWxjdWxhdGVkIGZyb20gU3BlY2llcyBUZW1wZXJhdHVyZSBJbmRpY2VzIChNaWtlIEJ1cnJvd3MpCiAgLSBWZWdldGF0aW9uIGNvdmVyIGluZGV4LCBjYWxjdWxhdGVkIGZyb20gJXRyZWUgY292ZXIgYW5kICVub24tdHJlZSB2ZWcgY292ZXIgKGxhdHRlciBjb3VudGVkIGFzIDEvMiksIGZyb20gdmVnZXRhdGlvbiBjb250aW51b3VzIGZpZWxkcyAoUnViZW4gUmVtZWxnYWRvKQotIERpZmZlcmVuY2VzIGluIHRlbXBvcmFsIHR1cm5vdmVyIChyZXNwb25zZSB2YXJpYWJsZSkgbW9kZWxlZCB3aXRoIGEgbGluZWFyIG1peGVkIGVmZmVjdHMgbW9kZWwgKG5sbWUgcGFja2FnZSwgbG1lKCkgZnVuY3Rpb24pLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCgpgYGB7ciBzZXR1cH0KbGlicmFyeShkYXRhLnRhYmxlKSAjIGZvciBoYW5kbGluZyBsYXJnZSBkYXRhc2V0cwpsaWJyYXJ5KGdncGxvdDIpICMgZm9yIHNvbWUgcGxvdHRpbmcKbGlicmFyeShubG1lKSAjIGZvciBNRSBtb2RlbHMKbGlicmFyeShtYXBzKSAjIGZvciBtYXAKbGlicmFyeShncmlkRXh0cmEpICMgdG8gY29tYmluZSBnZ3Bsb3RzIHRvZ2V0aGVyCmxpYnJhcnkoZ3JpZCkgIyB0byBjb21iaW5lIGdncGxvdHMgdG9nZXRoZXIKbGlicmFyeShSQ29sb3JCcmV3ZXIpCgpvcHRpb25zKHdpZHRoPTUwMCkgIyB0dXJuIG9mZiBtb3N0IHRleHQgd3JhcHBpbmcKCiMgdGVsbCBSU3R1ZGlvIHRvIHVzZSBwcm9qZWN0IHJvb3QgZGlyZWN0b3J5IGFzIHRoZSByb290IGZvciB0aGlzIG5vdGVib29rLiBOZWVkZWQgc2luY2Ugd2UgYXJlIHN0b3JpbmcgY29kZSBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeS4Ka25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBycHJvanJvb3Q6OmZpbmRfcnN0dWRpb19yb290X2ZpbGUoKSkgCmBgYAoKYGBge3IgbG9hZCBkYXRhfQojIFR1cm5vdmVyIGFuZCBjb3ZhcmlhdGVzIGFzc2VtYmxlZCBieSB0dXJub3Zlcl92c190ZW1wZXJhdHVyZV9wcmVwLlJtZAp0cmVuZHMgPC0gZnJlYWQoJ291dHB1dC90dXJub3Zlcl93X2NvdmFyaWF0ZXMuY3N2Lmd6JykKCiMgc2V0IHJlYWxtIG9yZGVyCnRyZW5kc1ssIFJFQUxNIDo9IGZhY3RvcihSRUFMTSwgbGV2ZWxzID0gYygnRnJlc2h3YXRlcicsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnKSwgb3JkZXJlZCA9IEZBTFNFKV0KCiMgc2V0IHVwIHNpZ24gb2YgdGVtcGVyYXR1cmUgY2hhbmdlCnRyZW5kc1ssIHRzaWduIDo9IGZhY3RvcihzaWduKHRlbXB0cmVuZCkpXQoKIyByZWFsbSB0aGF0IGNvbWJpbmVkIFRlcnJlc3RyaWFsIGFuZCBGcmVzaHdhdGVyLCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBodW1hbiBpbXBhY3QKdHJlbmRzWywgUkVBTE0yIDo9IFJFQUxNXQpsZXZlbHModHJlbmRzJFJFQUxNMikgPSBsaXN0KFRlcnJGcmVzaCA9ICJGcmVzaHdhdGVyIiwgVGVyckZyZXNoID0gIlRlcnJlc3RyaWFsIiwgTWFyaW5lID0gIk1hcmluZSIpCgojIGdyb3VwIE1hcmluZSBpbnZlcnRlYnJhdGVzL3BsYW50cyBpbiB3aXRoIEFsbAp0cmVuZHNbLCB0YXhhX21vZDIgOj0gdGF4YV9tb2RdCnRyZW5kc1t0YXhhX21vZCA9PSAnTWFyaW5lIGludmVydGVicmF0ZXMvcGxhbnRzJywgdGF4YV9tb2QyIDo9ICdBbGwnXQpgYGAKCgojIyMgTG9nLXRyYW5zZm9ybSBzb21lIHZhcmlhYmxlcywgdGhlbiBjZW50ZXIgYW5kIHNjYWxlLiAKYGBgIHtyIGNlbnRlciBhbmQgc2NhbGV9CnRyZW5kc1ssIHRlbXBhdmUuc2MgOj0gc2NhbGUodGVtcGF2ZSldCnRyZW5kc1ssIHRlbXBhdmVfbWV0YWIuc2MgOj0gc2NhbGUodGVtcGF2ZV9tZXRhYildCnRyZW5kc1ssIHNlYXMuc2MgOj0gc2NhbGUoc2VhcyldCnRyZW5kc1ssIG1pY3JvY2xpbS5zYyA6PSBzY2FsZShsb2cobWljcm9jbGltKSldCnRyZW5kc1ssIHRlbXB0cmVuZC5zYyA6PSBzY2FsZSh0ZW1wdHJlbmQsIGNlbnRlciA9IEZBTFNFKV0KdHJlbmRzWywgdGVtcHRyZW5kX2Ficy5zYyA6PSBzY2FsZShhYnModGVtcHRyZW5kKSwgY2VudGVyID0gRkFMU0UpXSAjIGRvIG5vdCBjZW50ZXIsIHNvIHRoYXQgMCBpcyBzdGlsbCAwIHRlbXBlcmF0dXJlIGNoYW5nZQp0cmVuZHNbLCBtYXNzLnNjIDo9IHNjYWxlKGxvZyhtYXNzX21lYW5fd2VpZ2h0KSldCnRyZW5kc1ssIHNwZWVkLnNjIDo9IHNjYWxlKGxvZyhzcGVlZF9tZWFuX3dlaWdodCsxKSldCnRyZW5kc1ssIGxpZmVzcGFuLnNjIDo9IHNjYWxlKGxvZyhsaWZlc3Bhbl9tZWFuX3dlaWdodCkpXQp0cmVuZHNbLCBjb25zdW1lcmZyYWMuc2MgOj0gc2NhbGUoY29uc2ZyYWMpXQp0cmVuZHNbLCBlbmRvdGhlcm1mcmFjLnNjIDo9IHNjYWxlKGVuZG9mcmFjKV0KdHJlbmRzWywgbnNwcC5zYyA6PSBzY2FsZShsb2coTnNwcCkpXQp0cmVuZHNbLCB0aGVybWFsX2JpYXMuc2MgOj0gc2NhbGUodGhlcm1hbF9iaWFzKV0KdHJlbmRzWywgbnBwLnNjIDo9IHNjYWxlKGxvZyhucHApKV0KdHJlbmRzWywgdmVnLnNjIDo9IHNjYWxlKGxvZyh2ZWcrMSkpXQp0cmVuZHNbLCBodW1hbl9ib3dsZXIuc2MgOj0gc2NhbGUobG9nKGh1bWFuX2Jvd2xlcisxKSksIGJ5ID0gUkVBTE0yXSAjIHNlcGFyYXRlIHNjYWxpbmcgYnkgcmVhbG0KdHJlbmRzW1JFQUxNMiA9PSAnVGVyckZyZXNoJywgaHVtYW5fZm9vdHByaW50LnNjIDo9IHNjYWxlKGxvZyhodW1hbl92ZW50ZXIrMSkpXQp0cmVuZHNbUkVBTE0yID09ICdNYXJpbmUnLCBodW1hbl9mb290cHJpbnQuc2MgOj0gc2NhbGUobG9nKGh1bWFuX2hhbHBlcm4pKV0KYGBgCgojIyMgRXhhbWluZSBob3cgbWFueSBkYXRhIHBvaW50cyBhcmUgYXZhaWxhYmxlCkp1c3QgdHVybm92ZXIKYGBge3Igc2FtcGxlIHNpemUgYWxsfQpjYXQoJ092ZXJhbGwgIyB0aW1lLXNlcmllczogJywgbnJvdyh0cmVuZHMpLCAnXG4nKQpjYXQoJyMgc3R1ZGllczogJywgdHJlbmRzWywgbGVuZ3RoKHVuaXF1ZShTVFVEWV9JRCkpXSwgJ1xuJykKY2F0KCdEYXRhIHBvaW50czogJywgdHJlbmRzWywgc3VtKG55ckJUKV0sICdcbicpCnRyZW5kc1ssIHRhYmxlKFJFQUxNKV0KdHJlbmRzWywgdGFibGUodGF4YV9tb2QpXQp0cmVuZHNbLCB0YWJsZSh0YXhhX21vZCwgUkVBTE0pXQpgYGAKCldpdGggYWxsIGNvdmFyaWF0ZXMgKEJvd2xlciBmb3IgaHVtYW4pCmBgYHtyIHNhbXBsZSBzaXplIGZvciBKYWNjYXJkIHR1cm5vdmVyfQojIHRoZSBjYXNlcyB3ZSBjYW4gY29tcGFyZQphcHBseSh0cmVuZHNbLCAuKEp0dXRyZW5kLCBSRUFMTSwgdGVtcGF2ZS5zYywgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCB0ZW1wdHJlbmQuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBsaWZlc3Bhbi5zYywgY29uc3VtZXJmcmFjLnNjLCBlbmRvdGhlcm1mcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgdmVnLnNjLCBodW1hbl9ib3dsZXIuc2MpXSwgTUFSR0lOID0gMiwgRlVOID0gZnVuY3Rpb24oeCkgc3VtKCFpcy5uYSh4KSkpCmkgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmQsIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgdGVtcHRyZW5kLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIHZlZy5zYywgaHVtYW5fYm93bGVyLnNjKV0KY2F0KCdPdmVyYWxsICMgdGltZS1zZXJpZXM6ICcsIHN1bShpKSwgJ1xuJykKY2F0KCcjIHN0dWRpZXM6ICcsIHRyZW5kc1tpLCBsZW5ndGgodW5pcXVlKFNUVURZX0lEKSldLCAnXG4nKQpjYXQoJ0RhdGEgcG9pbnRzOiAnLCB0cmVuZHNbaSwgc3VtKG55ckJUKV0sICdcbicpCnRyZW5kc1tpLCB0YWJsZShSRUFMTSldCnRyZW5kc1tpLCB0YWJsZSh0YXhhX21vZCldCnRyZW5kc1tpLCB0YWJsZSh0YXhhX21vZCwgUkVBTE0pXQpgYGAKCiMjIyBDaG9vc2UgdGhlIHZhcmlhbmNlIHN0cnVjdHVyZSBmb3IgbWl4ZWQgZWZmZWN0cyBtb2RlbHMKVHJ5IGNvbWJpbmF0aW9ucyBvZgoKLSB2YXJpYW5jZSBzY2FsZWQgdG8gYSBwb3dlciBvZiB0aGUgbnVtYmVyIG9mIHllYXJzIGluIHRoZSBjb21tdW5pdHkgdGltZS1zZXJpZXMKLSB2YXJpYW5jZSBzY2FsZWQgdG8gYSBwb3dlciBvZiB0aGUgYWJzIHRlbXBlcmF0dXJlIHRyZW5kCi0gcmFuZG9tIGludGVyY2VwdCBmb3IgdGF4YV9tb2QKLSByYW5kb20gaW50ZXJjZXB0IGZvciBTVFVEWV9JRAotIHJhbmRvbSBzbG9wZSAoYWJzIHRlbXBlcmF0dXJlIHRyZW5kKSBmb3IgdGF4YV9tb2QKLSByYW5kb20gc2xvcGUgKGFicyB0ZW1wZXJhdHVyZSB0cmVuZCkgZm9yIFNUVURZX0lECi0gcmFuZG9tIGludGVyY2VwdCBmb3IgcmFyZWZ5SUQgKGZvciBvdmVyZGlzcGVyc2lvbikKCkFuZCBjaG9vc2UgdGhlIG9uZSB3aXRoIGxvd2VzdCBBSUMgKG5vdCBydW46IHRha2VzIGEgbG9uZyB0aW1lKQpgYGB7ciBjaG9vc2UgdmFyaWFuY2Ugc3RydWN0dXJlIGZvciBKYWNhcmQgdHVybm92ZXIsIGV2YWwgPSBGQUxTRX0KIyBmaXQgbW9kZWxzIGZvciB2YXJpYW5jZSBzdHJ1Y3R1cmUKZml4ZWQgPC0gZm9ybXVsYShKdHV0cmVuZCB+IFJFQUxNICsgdGVtcGF2ZV9tZXRhYi5zYyArIHNlYXMuc2MgKyBtaWNyb2NsaW0uc2MgKyBucHAuc2MgKyB0ZW1wdHJlbmRfYWJzLnNjICsKICAgICAgICAgICAgICAgICAgICAgbWFzcy5zYyArIHNwZWVkLnNjICsgbGlmZXNwYW4uc2MgKyBjb25zdW1lcmZyYWMuc2MgKyB0aGVybWFsX2JpYXMuc2MpCmkgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmQsIFJFQUxNLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIG5wcC5zYywgdGVtcHRyZW5kX2Ficy5zYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIGNvbnN1bWVyZnJhYy5zYywgdGhlcm1hbF9iaWFzLnNjKV0KbW9kcyA8LSB2ZWN0b3IoJ2xpc3QnLCAwKQptb2RzW1sxXV0gPC0gZ2xzKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSkKbW9kc1tbMl1dIDwtIGdscyhmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1szXV0gPC0gZ2xzKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgd2VpZ2h0cyA9IHZhclBvd2VyKDAuNSwgfiBhYnModGVtcHRyZW5kKSkpCgptb2RzW1s0XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8dGF4YV9tb2QyLCBjb250cm9sID0gbG1lQ29udHJvbChvcHQgPSAib3B0aW0iKSkKbW9kc1tbNV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfFNUVURZX0lELCBjb250cm9sID0gbG1lQ29udHJvbChvcHQgPSAib3B0aW0iKSkKbW9kc1tbNl1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzddXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXxTVFVEWV9JRC9yYXJlZnlJRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzhdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXx0YXhhX21vZDIvU1RVRFlfSUQvcmFyZWZ5SUQsIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICJvcHRpbSIpKQoKbW9kc1tbOV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH50ZW1wdHJlbmRfYWJzLnNjIHwgdGF4YV9tb2QpCm1vZHNbWzEwXV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfnRlbXB0cmVuZF9hYnMuc2MgfCBTVFVEWV9JRCkKbW9kc1tbMTFdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+dGVtcHRyZW5kX2Ficy5zYyB8IHRheGFfbW9kMi9TVFVEWV9JRCwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpCm1vZHNbWzEyXV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkpICMgaW5jbHVkZXMgb3ZlcmRpc3BlcnNpb24uIG5ldyBmb3JtdWxhIHNvIHRoYXQgcmFuZG9tIHNsb3BlIGlzIG9ubHkgZm9yIHN0dWR5IGxldmVsIChub3QgZW5vdWdoIGRhdGEgdG8gZXh0ZW5kIHRvIHJhcmVmeUlEKS4KbW9kc1tbMTNdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpKSAjIDMwKyBtaW4gdG8gZml0Cgptb2RzW1sxNF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfFNUVURZX0lELCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMTVdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXx0YXhhX21vZDIsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1sxNl1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5ueXJCVCkpCm1vZHNbWzE3XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8U1RVRFlfSUQvcmFyZWZ5SUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1sxOF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRC9yYXJlZnlJRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5ueXJCVCkpCm1vZHNbWzE5XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfnRlbXB0cmVuZF9hYnMuc2N8U1RVRFlfSUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+bnlyQlQpKQptb2RzW1syMF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMjFdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IDEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMjJdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IDEsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkKbW9kc1tbMjNdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkgIyBzaW5ndWxhciBwcmVjaXNpb24gd2FybmluZyB3aXRoIGxtZUNvbnRyb2wob3B0ID0gJ29wdGltJykgYW5kIGNvbnZlcmdlbmNlIGVycm9yIHdpdGhvdXQKbW9kc1tbMjRdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKSkgIyBzaW5ndWxhciBwcmVjaXNpb24gd2FybmluZyB3aXRoIGxtZUNvbnRyb2wob3B0ID0gJ29wdGltJykgYW5kIGNvbnZlcmdlbmNlIGVycm9yIHdpdGhvdXQKCm1vZHNbWzI1XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8dGF4YV9tb2QyLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfmFicyh0ZW1wdHJlbmQpKSkKbW9kc1tbMjZdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSB+MXxTVFVEWV9JRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5hYnModGVtcHRyZW5kKSkpCm1vZHNbWzI3XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfjF8U1RVRFlfSUQvcmFyZWZ5SUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+YWJzKHRlbXB0cmVuZCkpKQptb2RzW1syOF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH4xfHRheGFfbW9kMi9TVFVEWV9JRC9yYXJlZnlJRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5hYnModGVtcHRyZW5kKSkpCm1vZHNbWzI5XV0gPC0gbG1lKGZpeGVkLCBkYXRhID0gdHJlbmRzW2ksXSwgcmFuZG9tID0gfnRlbXB0cmVuZF9hYnMuc2N8U1RVRFlfSUQsIHdlaWdodHMgPSB2YXJQb3dlcigtMC41LCB+YWJzKHRlbXB0cmVuZCkpKQptb2RzW1szMF1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IH50ZW1wdHJlbmRfYWJzLnNjfHRheGFfbW9kMi9TVFVEWV9JRCwgd2VpZ2h0cyA9IHZhclBvd2VyKC0wLjUsIH5hYnModGVtcHRyZW5kKSksIGNvbnRyb2wgPSBsbWVDb250cm9sKG9wdCA9ICJvcHRpbSIpKQptb2RzW1szMV1dIDwtIGxtZShmaXhlZCwgZGF0YSA9IHRyZW5kc1tpLF0sIHJhbmRvbSA9IGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfmFicyh0ZW1wdHJlbmQpKSkKbW9kc1tbMzJdXSA8LSBsbWUoZml4ZWQsIGRhdGEgPSB0cmVuZHNbaSxdLCByYW5kb20gPSBsaXN0KHRheGFfbW9kMiA9IH4gdGVtcHRyZW5kX2Ficy5zYywgU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpLCB3ZWlnaHRzID0gdmFyUG93ZXIoLTAuNSwgfmFicyh0ZW1wdHJlbmQpKSwgY29udHJvbCA9IGxtZUNvbnRyb2wob3B0ID0gIm9wdGltIikpICMgc2luZ3VsYXIgcHJlY2lzaW9uIHdhcm5pbmcKCmFpY3MgPC0gc2FwcGx5KG1vZHMsIEFJQykKbWluYWljcyA8LSBhaWNzIC0gbWluKGFpY3MpCm1pbmFpY3MKd2hpY2gubWluKGFpY3MpCmBgYApDaG9vc2VzIHRoZSByYW5kb20gc2xvcGVzICh0ZW1wdHJlbmRfYWJzKSAmIGludGVyY2VwdHMgZm9yIFNUVURZX0lELCBvdmVyZGlzcGVyc2lvbiwgYW5kIHZhcmlhbmNlIHNjYWxlZCB0byBudW1iZXIgb2YgeWVhcnMuCldlIGhhdmVuJ3QgZGVhbHQgd2l0aCBwb3RlbnRpYWwgdGVzdGluZyBvbiB0aGUgYm91bmRhcnkgaXNzdWVzIGhlcmUgeWV0LgoKIyBSZXN1bHRzCiMjIFdoZXJlIGRvIHdlIGhhdmUgZGF0YT8KYGBge3IgbWFwfQp3b3JsZCA8LSBtYXBfZGF0YSgnd29ybGQnKQpnZ3Bsb3Qod29ybGQsIGFlcyh4ID0gbG9uZywgeSA9IGxhdCwgZ3JvdXAgPSBncm91cCkpICsKICAgIGdlb21fcG9seWdvbihmaWxsID0gJ2xpZ2h0Z3JheScsIGNvbG9yID0gJ3doaXRlJykgKwogICAgZ2VvbV9wb2ludChkYXRhID0gdHJlbmRzLCBhZXMocmFyZWZ5SURfeCwgcmFyZWZ5SURfeSwgZ3JvdXAgPSBSRUFMTSwgY29sb3IgPSBSRUFMTSksIHNpemUgPSAwLjUsIGFscGhhID0gMC40KSAgKwogICAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGU9IlNldDEiLCBuYW1lID0gJ1JlYWxtJykgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIGxlZ2VuZC5rZXk9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT0xNiksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0yMCkpICsKICBsYWJzKHggPSAnTG9uZ2l0dWRlICjCsCknLCB5ID0gJ0xhdGl0dWRlICjCsCknKQpgYGAKCk1vc3RseSBub3J0aGVybiBoZW1pc3BoZXJlLCBidXQgc3ByZWFkIGFsbCBvdmVyLiBObyBzbyBtdWNoIGluIEFmcmljYSBvciBtdWNoIG9mIEFzaWEuCgoKCgpBdmVyYWdlIHJhdGVzIG9mIHR1cm5vdmVyICh3aXRoIHllYXIgMSkKYGBge3IgcmF0ZXMgb2YgdHVybm92ZXJ9CnRyZW5kc1thYnModGVtcHRyZW5kKSA+PSAwLjUsIC4oYXZlID0gbWVhbihKdHV0cmVuZCksIHNkID0gc2QoSnR1dHJlbmQpL3NxcnQoLk4pKV0gIyB0dXJub3ZlciBwZXIgeWVhciBmb3IgbG9jYXRpb25zIGNoYW5naW5nIHRlbXBlcmF0dXJlCnRyZW5kc1thYnModGVtcHRyZW5kKSA8IDAuMSwgLihhdmUgPSBtZWFuKEp0dXRyZW5kKSwgc2QgPSBzZChKdHV0cmVuZCkvc3FydCguTikpXSAjIG5vdCBjaGFuZ2luZyB0ZW1wZXJhdHVyZQp0cmVuZHNbdGVtcHRyZW5kID49IDAuNSwgLihhdmUgPSBtZWFuKEp0dXRyZW5kKSwgc2QgPSBzZChKdHV0cmVuZCkvc3FydCguTikpXSAjIHdhcm1pbmcKdHJlbmRzW3RlbXB0cmVuZCA8PSAtMC41LCAuKGF2ZSA9IG1lYW4oSnR1dHJlbmQpLCBzZCA9IHNkKEp0dXRyZW5kKS9zcXJ0KC5OKSldICMgY29vbGluZwoKdHJlbmRzW2Ficyh0ZW1wdHJlbmQpID49IDAuNSAmIGFicyhyYXJlZnlJRF95KSA8IDM1LCAuKGF2ZSA9IG1lYW4oSnR1dHJlbmQpLCBzZCA9IHNkKEp0dXRyZW5kKS9zcXJ0KC5OKSldICMgdHJvcGljcyBhbmQgc3ViLXRyb3BpY3MKdHJlbmRzW2Ficyh0ZW1wdHJlbmQpID49IDAuNSAmIGFicyhyYXJlZnlJRF95KSA+PSAzNSAmIGFicyhyYXJlZnlJRF95KSA8IDY2LjU2MzM5LCAuKGF2ZSA9IG1lYW4oSnR1dHJlbmQpLCBzZCA9IHNkKEp0dXRyZW5kKS9zcXJ0KC5OKSldICMgdGVtcGVyYXRlCnRyZW5kc1thYnModGVtcHRyZW5kKSA+PSAwLjUgJiBhYnMocmFyZWZ5SURfeSkgPj0gNjYuNTYzMzksIC4oYXZlID0gbWVhbihKdHV0cmVuZCksIHNkID0gc2QoSnR1dHJlbmQpL3NxcnQoLk4pKV0gIyBhcmN0aWMKYGBgCkF2ZXJhZ2UgcmF0ZXMgb2YgdHVybm92ZXIgKHdpdGhvdXQgeWVhciAxKQpgYGB7ciByYXRlcyBvZiB0dXJub3ZlciByZW0wfQp0cmVuZHNbYWJzKHRlbXB0cmVuZCkgPj0gMC41LCAuKGF2ZSA9IG1lYW4oSnR1dHJlbmRyZW0wLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSBzZChKdHV0cmVuZHJlbTAsIG5hLnJtPVRSVUUpL3NxcnQoLk4pKV0gIyB0dXJub3ZlciBwZXIgeWVhciBmb3IgbG9jYXRpb25zIGNoYW5naW5nIHRlbXBlcmF0dXJlCnRyZW5kc1thYnModGVtcHRyZW5kKSA8IDAuMSwgLihhdmUgPSBtZWFuKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSBzZChKdHV0cmVuZHJlbTAsIG5hLnJtPVRSVUUpL3NxcnQoLk4pKV0gIyBub3QgY2hhbmdpbmcgdGVtcGVyYXR1cmUKdHJlbmRzW3RlbXB0cmVuZCA+PSAwLjUsIC4oYXZlID0gbWVhbihKdHV0cmVuZHJlbTAsIG5hLnJtPVRSVUUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSBzZChKdHV0cmVuZHJlbTAsIG5hLnJtPVRSVUUpL3NxcnQoLk4pKV0gIyB3YXJtaW5nCnRyZW5kc1t0ZW1wdHJlbmQgPD0gLTAuNSwgLihhdmUgPSBtZWFuKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSBzZChKdHV0cmVuZHJlbTAsIG5hLnJtPVRSVUUpL3NxcnQoLk4pKV0gIyBjb29saW5nCgp0cmVuZHNbYWJzKHRlbXB0cmVuZCkgPj0gMC41ICYgYWJzKHJhcmVmeUlEX3kpIDwgMzUsIAogICAgICAgLihhdmUgPSBtZWFuKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICBzZCA9IHNkKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSkvc3FydCguTikpXSAjIHRyb3BpY3MgYW5kIHN1Yi10cm9waWNzCnRyZW5kc1thYnModGVtcHRyZW5kKSA+PSAwLjUgJiBhYnMocmFyZWZ5SURfeSkgPj0gMzUgJiBhYnMocmFyZWZ5SURfeSkgPCA2Ni41NjMzOSwgCiAgICAgICAuKGF2ZSA9IG1lYW4oSnR1dHJlbmRyZW0wLCBuYS5ybT1UUlVFKSwgCiAgICAgICAgIHNkID0gc2QoSnR1dHJlbmRyZW0wLCBuYS5ybT1UUlVFKS9zcXJ0KC5OKSldICMgdGVtcGVyYXRlCnRyZW5kc1thYnModGVtcHRyZW5kKSA+PSAwLjUgJiBhYnMocmFyZWZ5SURfeSkgPj0gNjYuNTYzMzksIAogICAgICAgLihhdmUgPSBtZWFuKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSksIAogICAgICAgICBzZCA9IHNkKEp0dXRyZW5kcmVtMCwgbmEucm09VFJVRSkvc3FydCguTikpXSAjIGFyY3RpYwpgYGAKCgoKIyMgVGVtcGVyYXR1cmUtb25seSBtb2RlbCAoSnR1dHJlbmQsIEpiZXRhdHJlbmQsIEhvcm50cmVuZCkKIyMjIFdpdGggeWVhciAxCmBgYHtyIExNRSB0ZW1wZXJhdHVyZSBvbmx5fQppIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kLCBSRUFMTSwgdGVtcHRyZW5kKV0KCnJhbmRlZiA8LSBsaXN0KFNUVURZX0lEID0gfiBhYnModGVtcHRyZW5kKSwgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kb25seVR0cmVuZC5yZHMnKSl7CiAgbW9kb25seVR0cmVuZCA8LSByZWFkUkRTKCd0ZW1wL21vZG9ubHlUdHJlbmQucmRzJykKfSBlbHNlIHsKICBtb2Rvbmx5VHRyZW5kIDwtIGxtZShKdHV0cmVuZCB+IGFicyh0ZW1wdHJlbmQpKlJFQUxNLAogICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2Rvbmx5VHRyZW5kLCBmaWxlID0gJ3RlbXAvbW9kb25seVR0cmVuZC5yZHMnKQp9CgppMiA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhKYmV0YXRyZW5kLCBSRUFMTSwgdGVtcHRyZW5kKV0KaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kb25seVR0cmVuZEpiZXRhLnJkcycpKXsKICBtb2Rvbmx5VHRyZW5kSmJldGEgPC0gcmVhZFJEUygndGVtcC9tb2Rvbmx5VHRyZW5kSmJldGEucmRzJykKfSBlbHNlIHsKICBtb2Rvbmx5VHRyZW5kSmJldGEgPC0gbG1lKEpiZXRhdHJlbmQgfiBhYnModGVtcHRyZW5kKSpSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdSRU1MJywgCiAgICAgICAgICAgICAgICAgICBjb250cm9sPWxtZUNvbnRyb2wobXNNYXhJdGVyID0gMTAwLCBtYXhJdGVyID0gMTAwKSkKICBzYXZlUkRTKG1vZG9ubHlUdHJlbmRKYmV0YSwgZmlsZSA9ICd0ZW1wL21vZG9ubHlUdHJlbmRKYmV0YS5yZHMnKQp9CgppMyA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhIb3JudHJlbmQsIFJFQUxNLCB0ZW1wdHJlbmQpXQppZihmaWxlLmV4aXN0cygndGVtcC9tb2Rvbmx5VHRyZW5kSG9ybi5yZHMnKSl7CiAgbW9kb25seVR0cmVuZEhvcm4gPC0gcmVhZFJEUygndGVtcC9tb2Rvbmx5VHRyZW5kSG9ybi5yZHMnKQp9IGVsc2UgewogIG1vZG9ubHlUdHJlbmRIb3JuIDwtIGxtZShIb3JudHJlbmQgfiBhYnModGVtcHRyZW5kKSpSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kzLF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZG9ubHlUdHJlbmRIb3JuLCBmaWxlID0gJ3RlbXAvbW9kb25seVR0cmVuZEhvcm4ucmRzJykKfQoKc3VtbWFyeShtb2Rvbmx5VHRyZW5kKQpzdW1tYXJ5KG1vZG9ubHlUdHJlbmRKYmV0YSkKc3VtbWFyeShtb2Rvbmx5VHRyZW5kSG9ybikKCgpgYGAKCiMjIyBXaXRob3V0IHllYXIgMQpgYGB7ciBMTUUgdGVtcGVyYXR1cmUgb25seSByZW0wfQppNCA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhKdHV0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wdHJlbmQpXQoKcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IGFicyh0ZW1wdHJlbmQpLCByYXJlZnlJRCA9IH4xKQp2YXJlZiA8LSB2YXJQb3dlcigtMC41LCB+bnlyQlQpCgppZihmaWxlLmV4aXN0cygndGVtcC9tb2Rvbmx5VHRyZW5kcmVtMC5yZHMnKSl7CiAgbW9kb25seVR0cmVuZHJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2Rvbmx5VHRyZW5kcmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZG9ubHlUdHJlbmRyZW0wIDwtIGxtZShKdHV0cmVuZHJlbTAgfiBhYnModGVtcHRyZW5kKSpSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2k0LF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZG9ubHlUdHJlbmRyZW0wLCBmaWxlID0gJ3RlbXAvbW9kb25seVR0cmVuZHJlbTAucmRzJykKfQoKaTUgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wdHJlbmQpXQppZihmaWxlLmV4aXN0cygndGVtcC9tb2Rvbmx5VHRyZW5kSmJldGFyZW0wLnJkcycpKXsKICBtb2Rvbmx5VHRyZW5kSmJldGFyZW0wIDwtIHJlYWRSRFMoJ3RlbXAvbW9kb25seVR0cmVuZEpiZXRhcmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZG9ubHlUdHJlbmRKYmV0YXJlbTAgPC0gbG1lKEpiZXRhdHJlbmRyZW0wIH4gYWJzKHRlbXB0cmVuZCkqUkVBTE0sCiAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpNSxdLCBtZXRob2QgPSAnUkVNTCcsIAogICAgICAgICAgICAgICAgICAgY29udHJvbD1sbWVDb250cm9sKG1zTWF4SXRlciA9IDEwMCwgbWF4SXRlciA9IDEwMCkpCiAgc2F2ZVJEUyhtb2Rvbmx5VHRyZW5kSmJldGFyZW0wLCBmaWxlID0gJ3RlbXAvbW9kb25seVR0cmVuZEpiZXRhcmVtMC5yZHMnKQp9CgppNiA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhIb3JudHJlbmRyZW0wLCBSRUFMTSwgdGVtcHRyZW5kKV0KaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kb25seVR0cmVuZEhvcm5yZW0wLnJkcycpKXsKICBtb2Rvbmx5VHRyZW5kSG9ybnJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2Rvbmx5VHRyZW5kSG9ybnJlbTAucmRzJykKfSBlbHNlIHsKICBtb2Rvbmx5VHRyZW5kSG9ybnJlbTAgPC0gbG1lKEhvcm50cmVuZHJlbTAgfiBhYnModGVtcHRyZW5kKSpSRUFMTSwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2k2LF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZG9ubHlUdHJlbmRIb3JucmVtMCwgZmlsZSA9ICd0ZW1wL21vZG9ubHlUdHJlbmRIb3JucmVtMC5yZHMnKQp9CgpzdW1tYXJ5KG1vZG9ubHlUdHJlbmRyZW0wKQpzdW1tYXJ5KG1vZG9ubHlUdHJlbmRKYmV0YXJlbTApCnN1bW1hcnkobW9kb25seVR0cmVuZEhvcm5yZW0wKQoKCmBgYAoKIyMjIFBsb3QgdGhlIHRlbXAtb25seSBjb2VmZmljaWVudHMKYGBge3IgbW9kb25seVR0cmVuZHNpbXAgY29lZnN9CmNvbG9ycyA8LSBicmV3ZXIucGFsKDYsICdEYXJrMicpCgojIG1ha2UgdGFibGUgb2YgY29lZmZpY2llbnRzCmNvZWZzIDwtIGFzLmRhdGEuZnJhbWUoc3VtbWFyeShtb2Rvbmx5VHRyZW5kKSR0VGFibGUpCmNvZWZzMiA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkobW9kb25seVR0cmVuZEpiZXRhKSR0VGFibGUpCmNvZWZzMyA8LSBhcy5kYXRhLmZyYW1lKHN1bW1hcnkobW9kb25seVR0cmVuZEhvcm4pJHRUYWJsZSkKY29lZnM0IDwtIGFzLmRhdGEuZnJhbWUoc3VtbWFyeShtb2Rvbmx5VHRyZW5kcmVtMCkkdFRhYmxlKQpjb2VmczUgPC0gYXMuZGF0YS5mcmFtZShzdW1tYXJ5KG1vZG9ubHlUdHJlbmRKYmV0YXJlbTApJHRUYWJsZSkKY29lZnM2IDwtIGFzLmRhdGEuZnJhbWUoc3VtbWFyeShtb2Rvbmx5VHRyZW5kSG9ybnJlbTApJHRUYWJsZSkKY29lZnMkbW9kIDwtICdKdHUnCmNvZWZzMiRtb2QgPC0gJ0piZXRhJwpjb2VmczMkbW9kIDwtICdIb3JuJwpjb2VmczQkbW9kIDwtICdKdHVyZW0wJwpjb2VmczUkbW9kIDwtICdKYmV0YXJlbTAnCmNvZWZzNiRtb2QgPC0gJ0hvcm5yZW0wJwpyb3dzMSA8LSB3aGljaChncmVwbCgndGVtcHRyZW5kJywgcm93bmFtZXMoY29lZnMpKSkgIyBleHRyYWN0IHRlbXBlcmF0dXJlIGVmZmVjdApjb2xzIDwtIGMoJ1ZhbHVlJywgJ1N0ZC5FcnJvcicsICdtb2QnKQphbGxjb2VmcyA8LSByYmluZChjb2Vmc1tyb3dzMSwgY29sc10sIGNvZWZzMltyb3dzMSwgY29sc10sIGNvZWZzM1tyb3dzMSwgY29sc10sIAogICAgICAgICAgICAgICAgICBjb2VmczRbcm93czEsIGNvbHNdLCBjb2VmczVbcm93czEsIGNvbHNdLCBjb2VmczZbcm93czEsIGNvbHNdKQphbGxjb2VmcyRWYWx1ZVtncmVwbCgnUkVBTE1NYXJpbmUnLCByb3duYW1lcyhhbGxjb2VmcykpXSA8LSAKICBhbGxjb2VmcyRWYWx1ZVtncmVwbCgnUkVBTE1NYXJpbmUnLCByb3duYW1lcyhhbGxjb2VmcykpXSArIAogIGFsbGNvZWZzJFZhbHVlWyFncmVwbCgnUkVBTE0nLCByb3duYW1lcyhhbGxjb2VmcykpXSAjIGFkZCBpbnRlcmNlcHQgdG8gbWFyaW5lIGVmZmVjdHMKYWxsY29lZnMkVmFsdWVbZ3JlcGwoJ1JFQUxNVGVycmVzdHJpYWwnLCByb3duYW1lcyhhbGxjb2VmcykpXSA8LSAKICBhbGxjb2VmcyRWYWx1ZVtncmVwbCgnUkVBTE1UZXJyZXN0cmlhbCcsIHJvd25hbWVzKGFsbGNvZWZzKSldICsgCiAgYWxsY29lZnMkVmFsdWVbIWdyZXBsKCdSRUFMTScsIHJvd25hbWVzKGFsbGNvZWZzKSldICMgYWRkIGludGVyY2VwdCB0byB0ZXJyZXN0cmlhbCBlZmZlY3RzCgphbGxjb2VmcyRsQ0kgPC0gYWxsY29lZnMkVmFsdWUgLSBhbGxjb2VmcyRTdGQuRXJyb3IgIyBsb3dlciBjb25maWRlbmNlIGludGVydmFsCmFsbGNvZWZzJHVDSSA8LSBhbGxjb2VmcyRWYWx1ZSArIGFsbGNvZWZzJFN0ZC5FcnJvcgphbGxjb2VmcyR5IDwtIGMoMywgMiwgMSkgKyByZXAoYygwLCAtMC4xLCAtMC4yLCAtMC4zLCAtMC40LCAtMC41KSwgYygzLCAzLCAzLCAzLCAzLCAzKSkgIyB5LXZhbHVlcwphbGxjb2VmcyRjb2wgPC0gYyhyZXAoY29sb3JzWzFdLCAzKSwgcmVwKGNvbG9yc1syXSwgMyksIHJlcChjb2xvcnNbM10sIDMpLCAKICAgICAgICAgICAgICAgICAgcmVwKGNvbG9yc1s0XSwgMyksIHJlcChjb2xvcnNbNV0sIDMpLCByZXAoY29sb3JzWzZdLCAzKSkKYWxsY29lZnMkcmVhbG0gPC0gcmVwKGMoJ0ZyZXNod2F0ZXInLCAnTWFyaW5lJywgJ1RlcnJlc3RyaWFsJyksIDYpCgpwYXIobGFzID0gMSwgbWFpID0gYygwLjgsIDIsIDAuMSwgMC4xKSkKcGxvdCgwLDAsIGNvbCA9ICd3aGl0ZScsIHhsaW09YygtMC4xLCAwLjg1KSwgeWxpbSA9IGMoMC41LDMpLCAKICAgICB5YXh0PSduJywgeGxhYiA9ICdUdXJub3ZlciBwZXIgfMKwQy95cnwnLCB5bGFiID0nJykKYXhpcygyLCBhdCA9IDM6MSwgbGFiZWxzID0gYygnRnJlc2h3YXRlcicsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnKSwgY2V4LmF4aXMgPSAwLjcpCmFibGluZSh2ID0gMCwgY29sID0gJ2dyZXknKQpmb3IoaSBpbiAxOm5yb3coYWxsY29lZnMpKXsKICB3aXRoKGFsbGNvZWZzW2ksIF0sIHBvaW50cyhWYWx1ZSwgeSwgcGNoID0gMTYsIGNvbCA9IGNvbCkpCiAgd2l0aChhbGxjb2Vmc1tpLCBdLCBsaW5lcyh4ID0gYyhsQ0ksIHVDSSksIHkgPSBjKHksIHkpLCBjb2wgPSBjb2wpKQp9CmxlZ2VuZCgnYm90dG9tcmlnaHQnLCBjb2wgPSBjb2xvcnMsIGx3ZCA9IDEsIHBjaCA9IDE2LCAKICAgICAgIGxlZ2VuZCA9IGMoJ0phY2NhcmQgdHVybm92ZXInLCAnSmFjY2FyZCB0b3RhbCcsICdIb3JuLU1vcmlzaXRhJywKICAgICAgICAgICAgICAgICAgJ0phY2NhcmQgdHVybm92ZXIgcmVtMCcsICdKYWNjYXJkIHRvdGFsIHJlbTAnLCAnSG9ybi1Nb3Jpc2l0YSByZW0wJykpCgpgYGAKCiMjIyBOaWNlciBwbG90cyBvZiB0dXJub3ZlciB2cy4gdGVtcGVyYXR1cmUgZGF0YSBhbmQgbW9kZWwgZml0ClNjYXR0ZXJwbG90LCB2aW9saW4gcGxvdHMsIGFuZCBjb2VmZmljaWVudCBwbG90cyBhbGwgdG9nZXRoZXIKT2ZmIGZvciBub3cKYGBge3IgdHVybm92ZXIgdnMuIHRlbXBlcmF0dXJlIGJpZyBwbG90LCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD00LjUsIGV2YWw9RkFMU0V9CiMgb24gbWFjYm9vazogZmlnLndpZHRoPTMsIGZpZy5oZWlnaHQ9Mi4zNzUsIGZpZy5yZXRpbmE9Mywgb3V0LndpZHRoPTMsIG91dC5oZWlnaHQ9Mi4zNzUKIyBvbiBleHRlcm5hbCBtb25pdG9yOiBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD00LjUKdHJlbmRzW3RlbXB0cmVuZCA8PSAtMC41LCB0ZW1wdHJlbmR0ZXh0IDo9ICdDb29saW5nJ10KdHJlbmRzW2Ficyh0ZW1wdHJlbmQpIDw9IDAuMSwgdGVtcHRyZW5kdGV4dCA6PSAnU3RhYmxlJ10KdHJlbmRzW3RlbXB0cmVuZCA+PSAwLjUsIHRlbXB0cmVuZHRleHQgOj0gJ1dhcm1pbmcnXQoKdHJlbmRzW2FicyhyYXJlZnlJRF95KSA8IDM1LCBsYXR6b25lIDo9ICdTdWJ0cm9waWNzJ10KdHJlbmRzW2FicyhyYXJlZnlJRF95KSA+PSAzNSAmIGFicyhyYXJlZnlJRF94KSA8IDY2LjU2MzM5LCBsYXR6b25lIDo9ICdUZW1wZXJhdGUnXSAKdHJlbmRzW2FicyhyYXJlZnlJRF95KSA+PSA2Ni41NjMzOSwgbGF0em9uZSA6PSAnUG9sYXInXQp0cmVuZHNbLCBsYXR6b25lIDo9IGZhY3RvcihsYXR6b25lLCBsZXZlbHMgPSBjKCdTdWJ0cm9waWNzJywgJ1RlbXBlcmF0ZScsICdQb2xhcicpKV0KCnAxIDwtIGdncGxvdCh0cmVuZHMsIGFlcyh0ZW1wdHJlbmQsIEp0dXRyZW5kLCBjb2xvciA9IFJFQUxNLCBmaWxsID0gUkVBTE0sIHNpemUgPSBueXJCVCkpICsKICBnZW9tX3BvaW50KG5hLnJtID0gVFJVRSwgc2hhcGUgPSAxNiwgYWxwaGEgPSAwLjEpICsgCiAgZ2VvbV9zbW9vdGgoZGF0YT1zdWJzZXQodHJlbmRzLCBhYnModGVtcHRyZW5kKSA8IDAuNzUpLCBtZXRob2QgPSAnZ2FtJywgZm9ybXVsYSA9IHkgfiBzKHgsIGJzID0gImNzIiksIAogICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlPSJTZXQxIiwgbmFtZSA9ICdSZWFsbScpICsgCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZT0iU2V0MSIsIG5hbWUgPSAnUmVhbG0nKSArIAogIGxhYnMoeCA9ICdUZW1wZXJhdHVyZSB0cmVuZCAowrBDL3lyKScsIHkgPSAnSmFjY2FyZCB0dXJub3ZlcicsIHRhZyA9ICdBJykgKwogIHNjYWxlX3NpemVfY29udGludW91cyhyYW5nZSA9IGMoMSwgOCksIGJyZWFrcyA9IGMoMiwgNSwgMjApKSArCiAgZ3VpZGVzKHNpemUgPSBndWlkZV9sZWdlbmQodGl0bGUgPSAnWWVhcnMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlLmFlcyA9IGxpc3QobGluZXR5cGU9MCwgZmlsbCA9IE5BLCBhbHBoYSA9IDEpKSkgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIGxlZ2VuZC5rZXk9ZWxlbWVudF9ibGFuaygpLAogICAgICAgIGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC41LCJsaW5lIiksIAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT04KSwKICAgICAgICBheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTEwKSkKCnAyIDwtIGdncGxvdCh0cmVuZHNbIWlzLm5hKHRlbXB0cmVuZHRleHQpLCBdLCBhZXModGVtcHRyZW5kdGV4dCwgSnR1dHJlbmQpKSArCiAgZ2VvbV92aW9saW4oZHJhd19xdWFudGlsZXMgPSBjKDAuMjUsIDAuNSwgMC43NSksIGZpbGwgPSAnZ3JleScpICsKICBsYWJzKHggPSAnJywgeSA9ICdKYWNjYXJkIHR1cm5vdmVyJywgdGFnID0gJ0InKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgbGVnZW5kLmtleT1lbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTgpLAogICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9MTApKQoKcDMgPC0gZ2dwbG90KHRyZW5kc1thYnModGVtcHRyZW5kKSA+PSAwLjUgJiAhaXMubmEobGF0em9uZSksIF0sIGFlcyhsYXR6b25lLCBKdHV0cmVuZCkpICsKICBnZW9tX3Zpb2xpbihkcmF3X3F1YW50aWxlcyA9IGMoMC4yNSwgMC41LCAwLjc1KSwgZmlsbCA9ICdncmV5JykgKyAKICBsYWJzKHggPSAnJywgeSA9ICcnLCB0YWcgPSAnQycpICsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBsZWdlbmQua2V5PWVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9NyksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT0xMCkpCgpwNCA8LSBnZ3Bsb3QoYWxsY29lZnMsIGFlcyhWYWx1ZSwgeSwgZ3JvdXAgPSBtb2QsIGNvbG9yID0gbW9kKSkgKwogIGdlb21fZXJyb3JiYXJoKGFlcyh4bWluID0gbENJLCB4bWF4ID0gdUNJLCBoZWlnaHQgPSAwKSkgKyAKICBnZW9tX3BvaW50KCkgKyAKICBsYWJzKHggPSBleHByZXNzaW9uKGF0b3AoJ1RlbXBlcmF0dXJlIGNoYW5nZSBlZmZlY3QnLCAnKFR1cm5vdmVyICd+ZGVncmVlKidDJ14nLTEnKicpJykpLCB5ID0gJycsIHRhZyA9ICdEJykgKwogIHNjYWxlX2NvbG9yX2dyZXkoKSArIAogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0nbm9uZScsCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTcpLAogICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9NykpICsgCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPWMoMCwgMSkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICcnLCBicmVha3MgPSBjKDEsIDIsIDMpLCBsYWJlbHMgPSBjKCdUZXJyZXN0cmlhbCcsICdNYXJpbmUnLCAnRnJlc2h3YXRlcicpKQoKZ3JpZC5hcnJhbmdlKHAxLCBwMiwgcDMsIHA0LCBuY29sID0gMywgbGF5b3V0X21hdHJpeCA9IHJiaW5kKGMoMSwxLDEpLCBjKDIsMyw0KSksCiAgICAgICAgICAgICBoZWlnaHRzPWModW5pdCgwLjY2LCAibnBjIiksIHVuaXQoMC4zNCwgIm5wYyIpKSkKYGBgCgojIyBGdWxsIG1vZGVscwpUcnkgc3RhdGljIGNvdmFyaWF0ZXMgcGx1cyBpbnRlcmFjdGlvbnMgb2YgYWJzIHRlbXBlcmF0dXJlIHRyZW5kIHdpdGggZWFjaCBjb3ZhcmlhdGU6CgotIHJlYWxtCi0gc3BlZWQKLSBtYXNzCi0gbGlmZXNwYW4KLSBhdmVyYWdlIG1ldGFib2xpYyB0ZW1wZXJhdHVyZQotIGNvbnN1bWVyIGZyYWN0aW9uCi0gZW5kb3RoZXJtIGZyYWN0aW9uCi0gZW52aXJvbm1lbnRhbCB0ZW1wZXJhdHVyZQotIHNlYXNvbmFsaXR5Ci0gbWljcm9jbGltYXRlcwotIHRoZXJtYWwgYmlhcwotIE5QUAotIHZlZ2V0YXRpb24KLSBodW1hbiBmb290cHJpbnQKCkV4Y2VwdCBmb3IgdGhlcm1hbCBiaWFzOiBpbnRlcmFjdCB3aXRoIHRlbXBlcmF0dXJlIHRyZW5kIChub3QgYWJzKQoKIyMjIEZpdCBmdWxsIG1vZGVscwojIyMjIEZ1bGwgbW9kZWwgZm9yIEphY2NhcmQgdHVybm92ZXIKVHJ5IEJvd2xlciBvciBWZW50ZXIvSGFscGVybiBodW1hbiBpbXBhY3QKYGBge3IgTE1FIEphY2FyZCB0dXJub3ZlciB0ZW1wZXJhdHVyZSBmdWxsfQojIHVzaW5nIEJvd2xlciBmb3IgaHVtYW4gaW1wYWN0CmkgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmQsIFJFQUxNLCB0ZW1wYXZlLnNjLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZC5zYywgdGVtcHRyZW5kX2Ficy5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIGVuZG90aGVybWZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCB2ZWcuc2MsIGh1bWFuX2Jvd2xlci5zYyldCgpyYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGwxLnJkcycpKXsKICBtb2RUZnVsbDEgPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbDEucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbDEgPC0gbG1lKEp0dXRyZW5kIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdHNpZ24gKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmxpZmVzcGFuLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyplbmRvdGhlcm1mcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5wcC5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdmVnLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbDEsIGZpbGUgPSAndGVtcC9tb2RUZnVsbDEucmRzJykKfQoKIyB1c2luZyBWZW50ZXIvSGFscGVybiBmb3IgaHVtYW4gaW1wYWN0CmkxLjIgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmQsIFJFQUxNLCB0ZW1wYXZlLnNjLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZC5zYywgdGVtcHRyZW5kX2Ficy5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIGVuZG90aGVybWZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCB2ZWcuc2MsIGh1bWFuX2Zvb3RwcmludC5zYyldCgpyYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxmb290cHJpbnQucmRzJykpewogIG1vZFRmdWxsZm9vdHByaW50IDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxmb290cHJpbnQucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbGZvb3RwcmludCA8LSBsbWUoSnR1dHJlbmQgfiB0ZW1wdHJlbmRfYWJzLnNjKlJFQUxNICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdHNpZ24gKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc2Vhcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzcGVlZC5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmxpZmVzcGFuLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyplbmRvdGhlcm1mcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5wcC5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdmVnLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9mb290cHJpbnQuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTEuMixdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbGZvb3RwcmludCwgZmlsZSA9ICd0ZW1wL21vZFRmdWxsZm9vdHByaW50LnJkcycpCn0KCnN1bW1hcnkobW9kVGZ1bGwxKQpzdW1tYXJ5KG1vZFRmdWxsZm9vdHByaW50KQoKCmBgYAoKIyMjIyBGdWxsIG1vZGVsIGZvciBKYWNjYXJkIHR1cm5vdmVyLCByZW1vdmluZyB5ZWFyIDEKVHJ5IEJvd2xlciBvciBWZW50ZXIvSGFscGVybiBodW1hbiBpbXBhY3QKYGBge3IgTE1FIEphY2FyZCB0dXJub3ZlciB0ZW1wZXJhdHVyZSBmdWxsIHJlbTB9CiMgdXNpbmcgQm93bGVyIGZvciBodW1hbiBpbXBhY3QKaTEgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSnR1dHJlbmRyZW0wLCBSRUFMTSwgdGVtcGF2ZS5zYywgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmQuc2MsIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBsaWZlc3Bhbi5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBlbmRvdGhlcm1mcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVnLnNjLCBodW1hbl9ib3dsZXIuc2MpXQoKcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpCnZhcmVmIDwtIHZhclBvd2VyKC0wLjUsIH5ueXJCVCkKCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxscmVtMC5yZHMnKSl7CiAgbW9kVGZ1bGxyZW0wIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxyZW0wLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxyZW0wIDwtIGxtZShKdHV0cmVuZHJlbTAgfiB0ZW1wdHJlbmRfYWJzLnNjKlJFQUxNICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0c2lnbiArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmUuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmVfbWV0YWIuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWFzcy5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbGlmZXNwYW4uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmVuZG90aGVybWZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTIsCiAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMSxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbHJlbTAsIGZpbGUgPSAndGVtcC9tb2RUZnVsbHJlbTAucmRzJykKfQoKIyB1c2luZyBWZW50ZXIvSGFscGVybiBmb3IgaHVtYW4gaW1wYWN0CmkyIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kcmVtMCwgUkVBTE0sIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kLnNjLCB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlZy5zYywgaHVtYW5fZm9vdHByaW50LnNjKV0KCnJhbmRlZiA8LSBsaXN0KFNUVURZX0lEID0gfiB0ZW1wdHJlbmRfYWJzLnNjLCByYXJlZnlJRCA9IH4xKQp2YXJlZiA8LSB2YXJQb3dlcigtMC41LCB+bnlyQlQpCgppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUZnVsbGZvb3RwcmludHJlbTAucmRzJykpewogIG1vZFRmdWxsZm9vdHByaW50cmVtMCA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsZm9vdHByaW50cmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsZm9vdHByaW50cmVtMCA8LSBsbWUoSnR1dHJlbmRyZW0wIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRzaWduICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZS5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypsaWZlc3Bhbi5zYyArIAogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZW5kb3RoZXJtZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnNwcC5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnZlZy5zYyArCiAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqaHVtYW5fZm9vdHByaW50LnNjOlJFQUxNMiwKICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZFRmdWxsZm9vdHByaW50cmVtMCwgZmlsZSA9ICd0ZW1wL21vZFRmdWxsZm9vdHByaW50cmVtMC5yZHMnKQp9CgpzdW1tYXJ5KG1vZFRmdWxscmVtMCkKc3VtbWFyeShtb2RUZnVsbGZvb3RwcmludHJlbTApCgoKYGBgCgojIyMjIEZ1bGwgbW9kZWxzIGZvciB0b3RhbCBhbmQgSE0KYGBge3IgTE1FIEphY2FyZCB0b3RhbCBhbmQgTUggbW9kZWxzLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9OH0KaTIgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZCwgUkVBTE0sIHRlbXBhdmUuc2MsIHRlbXBhdmVfbWV0YWIuc2MsIHNlYXMuc2MsIG1pY3JvY2xpbS5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kLnNjLCB0ZW1wdHJlbmRfYWJzLnNjLCBtYXNzLnNjLCBzcGVlZC5zYywgbGlmZXNwYW4uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIHZlZy5zYywgaHVtYW5fYm93bGVyLnNjKV0KaTMgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSG9ybnRyZW5kLCBSRUFMTSwgdGVtcGF2ZS5zYywgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmQuc2MsIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBsaWZlc3Bhbi5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZXJmcmFjLnNjLCBlbmRvdGhlcm1mcmFjLnNjLCBuc3BwLnNjLCB0aGVybWFsX2JpYXMuc2MsIG5wcC5zYywgdmVnLnNjLCBodW1hbl9ib3dsZXIuc2MpXQoKcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpCnZhcmVmIDwtIHZhclBvd2VyKC0wLjUsIH5ueXJCVCkKCiMgZnVsbCBtb2RlbHMKaWYoZmlsZS5leGlzdHMoJ3RlbXAvbW9kVGZ1bGxKYmV0YS5yZHMnKSl7CiAgbW9kVGZ1bGxKYmV0YSA8LSByZWFkUkRTKCd0ZW1wL21vZFRmdWxsSmJldGEucmRzJykKfSBlbHNlIHsKICBtb2RUZnVsbEpiZXRhIDwtIGxtZShKYmV0YXRyZW5kIH4gdGVtcHRyZW5kX2Ficy5zYypSRUFMTSArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmUuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbGlmZXNwYW4uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZW5kb3RoZXJtZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZFRmdWxsSmJldGEsIGZpbGUgPSAndGVtcC9tb2RUZnVsbEpiZXRhLnJkcycpCn0KCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsSG9ybi5yZHMnKSl7CiAgbW9kVGZ1bGxIb3JuIDwtIHJlYWRSRFMoJ3RlbXAvbW9kVGZ1bGxIb3JuLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxIb3JuIDwtIGxtZShIb3JudHJlbmQgfiB0ZW1wdHJlbmRfYWJzLnNjKlJFQUxNICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmUuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmVfbWV0YWIuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbWFzcy5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbGlmZXNwYW4uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmVuZG90aGVybWZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm5zcHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp2ZWcuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTIsCiAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMyxdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbEhvcm4sIGZpbGUgPSAndGVtcC9tb2RUZnVsbEhvcm4ucmRzJykKfQoKc3VtbWFyeShtb2RUZnVsbEpiZXRhKQpzdW1tYXJ5KG1vZFRmdWxsSG9ybikKYGBgCgojIyMjIEZ1bGwgbW9kZWxzIGZvciB0b3RhbCBhbmQgSE0gKHJlbW92ZSB5ZWFyIDEpCmBgYHtyIExNRSBKYWNhcmQgdG90YWwgYW5kIE1IIG1vZGVscyByZW0wLCBmaWcud2lkdGg9MTAsIGZpZy5oZWlnaHQ9OH0KaTIgPC0gdHJlbmRzWywgY29tcGxldGUuY2FzZXMoSmJldGF0cmVuZHJlbTAsIFJFQUxNLCB0ZW1wYXZlLnNjLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZC5zYywgdGVtcHRyZW5kX2Ficy5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIGVuZG90aGVybWZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWcuc2MsIGh1bWFuX2Jvd2xlci5zYyldCmkzIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEhvcm50cmVuZHJlbTAsIFJFQUxNLCB0ZW1wYXZlLnNjLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZC5zYywgdGVtcHRyZW5kX2Ficy5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIGVuZG90aGVybWZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWcuc2MsIGh1bWFuX2Jvd2xlci5zYyldCgpyYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQoKIyBmdWxsIG1vZGVscwppZihmaWxlLmV4aXN0cygndGVtcC9tb2RUZnVsbEpiZXRhcmVtMC5yZHMnKSl7CiAgbW9kVGZ1bGxKYmV0YXJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbEpiZXRhcmVtMC5yZHMnKQp9IGVsc2UgewogIG1vZFRmdWxsSmJldGFyZW0wIDwtIGxtZShKYmV0YXRyZW5kcmVtMCB+IHRlbXB0cmVuZF9hYnMuc2MqUkVBTE0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdHNpZ24gKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmxpZmVzcGFuLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmVuZG90aGVybWZyYWMuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnBwLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdmVnLnNjICsKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqaHVtYW5fYm93bGVyLnNjOlJFQUxNMiwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMixdLCBtZXRob2QgPSAnUkVNTCcpCiAgc2F2ZVJEUyhtb2RUZnVsbEpiZXRhcmVtMCwgZmlsZSA9ICd0ZW1wL21vZFRmdWxsSmJldGFyZW0wLnJkcycpCn0KCmlmKGZpbGUuZXhpc3RzKCd0ZW1wL21vZFRmdWxsSG9ybnJlbTAucmRzJykpewogIG1vZFRmdWxsSG9ybnJlbTAgPC0gcmVhZFJEUygndGVtcC9tb2RUZnVsbEhvcm5yZW0wLnJkcycpCn0gZWxzZSB7CiAgbW9kVGZ1bGxIb3JucmVtMCA8LSBsbWUoSG9ybnRyZW5kcmVtMCB+IHRlbXB0cmVuZF9hYnMuc2MqUkVBTE0gKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyp0c2lnbiArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZS5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptaWNyb2NsaW0uc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjICsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MgKyAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypsaWZlc3Bhbi5zYyArIAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKmNvbnN1bWVyZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqZW5kb3RoZXJtZnJhYy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqbnNwcC5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqdGhlcm1hbF9iaWFzLnNjOnRzaWduICsKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYypucHAuc2MgKwogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wdHJlbmRfYWJzLnNjKnZlZy5zYyArCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MqaHVtYW5fYm93bGVyLnNjOlJFQUxNMiwKICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kzLF0sIG1ldGhvZCA9ICdSRU1MJykKICBzYXZlUkRTKG1vZFRmdWxsSG9ybnJlbTAsIGZpbGUgPSAndGVtcC9tb2RUZnVsbEhvcm5yZW0wLnJkcycpCn0KCnN1bW1hcnkobW9kVGZ1bGxKYmV0YXJlbTApCnN1bW1hcnkobW9kVGZ1bGxIb3JucmVtMCkKYGBgCgojIyMgUGxvdHMgZnJvbSB0aGUgZnVsbCBtb2RlbHMKIyMjIyBQbG90IHRoZSBjb2VmZmljaWVudHMKYGBge3IgcGxvdCBmdWxsVG1vZDEsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD03fQoKY29lZnMgPC0gc3VtbWFyeShtb2RUZnVsbDEpJHRUYWJsZQpjb2VmczIgPC0gc3VtbWFyeShtb2RUZnVsbGZvb3RwcmludCkkdFRhYmxlCmNvZWZzMyA8LSBzdW1tYXJ5KG1vZFRmdWxsSmJldGEpJHRUYWJsZQpjb2VmczQgPC0gc3VtbWFyeShtb2RUZnVsbEhvcm4pJHRUYWJsZQpjb2VmczUgPC0gc3VtbWFyeShtb2RUZnVsbHJlbTApJHRUYWJsZQpjb2VmczYgPC0gc3VtbWFyeShtb2RUZnVsbEpiZXRhcmVtMCkkdFRhYmxlCmNvZWZzNyA8LSBzdW1tYXJ5KG1vZFRmdWxsSG9ybnJlbTApJHRUYWJsZQoKdmFyc3RvcGxvdCA8LSB1bmlxdWUoYyhyb3duYW1lcyhjb2VmcyksIHJvd25hbWVzKGNvZWZzMiksIHJvd25hbWVzKGNvZWZzMyksIHJvd25hbWVzKGNvZWZzNCksCiAgICAgICAgICAgICAgICAgICAgICAgcm93bmFtZXMoY29lZnM1KSwgcm93bmFtZXMoY29lZnM2KSwgcm93bmFtZXMoY29lZnM3KSkpCnZhcnN0b3Bsb3QgPC0gdmFyc3RvcGxvdFt3aGljaCghZ3JlcGwoJ0ludGVyY2VwdCcsIHZhcnN0b3Bsb3QpIHwgZ3JlcGwoJzonLCB2YXJzdG9wbG90KSldICMgdmFycyB0byBwbG90Cgpyb3dzMV8xIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzKSAlaW4lIHZhcnN0b3Bsb3QpICMgcm93cyBpbiBjb2Vmcwpyb3dzMV8yIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzMikgJWluJSB2YXJzdG9wbG90KQpyb3dzMV8zIDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzMykgJWluJSB2YXJzdG9wbG90KQpyb3dzMV80IDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzNCkgJWluJSB2YXJzdG9wbG90KQpyb3dzMV81IDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzNSkgJWluJSB2YXJzdG9wbG90KQpyb3dzMV82IDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzNikgJWluJSB2YXJzdG9wbG90KQpyb3dzMV83IDwtIHdoaWNoKHJvd25hbWVzKGNvZWZzNykgJWluJSB2YXJzdG9wbG90KQp4bGltcyA8LSByYW5nZShjKGNvZWZzW3Jvd3MxXzEsMV0gLSBjb2Vmc1tyb3dzMV8xLDJdLCBjb2Vmc1tyb3dzMV8xLDFdICsgY29lZnNbcm93czFfMSwyXSwgCiAgICAgICAgICAgICAgICAgIGNvZWZzMltyb3dzMV8yLDFdIC0gY29lZnMyW3Jvd3MxXzIsMl0sIGNvZWZzMltyb3dzMV8yLDFdICsgY29lZnMyW3Jvd3MxXzIsMl0sIAogICAgICAgICAgICAgICAgICBjb2VmczNbcm93czFfMywxXSAtIGNvZWZzM1tyb3dzMV8zLDJdLCBjb2VmczNbcm93czFfMywxXSArIGNvZWZzM1tyb3dzMV8zLDJdLAogICAgICAgICAgICAgICAgICBjb2VmczRbcm93czFfNCwxXSAtIGNvZWZzNFtyb3dzMV80LDJdLCBjb2VmczRbcm93czFfNCwxXSArIGNvZWZzNFtyb3dzMV80LDJdLAogICAgICAgICAgICAgICAgICBjb2VmczVbcm93czFfNSwxXSAtIGNvZWZzNVtyb3dzMV81LDJdLCBjb2VmczVbcm93czFfNSwxXSArIGNvZWZzNVtyb3dzMV81LDJdLCAKICAgICAgICAgICAgICAgICAgY29lZnM2W3Jvd3MxXzYsMV0gLSBjb2VmczZbcm93czFfNiwyXSwgY29lZnM2W3Jvd3MxXzYsMV0gKyBjb2VmczZbcm93czFfNiwyXSwKICAgICAgICAgICAgICAgICAgY29lZnM3W3Jvd3MxXzcsMV0gLSBjb2Vmczdbcm93czFfNywyXSwgY29lZnM3W3Jvd3MxXzcsMV0gKyBjb2Vmczdbcm93czFfNywyXSkpCgoKY29scyA8LSBicmV3ZXIucGFsKDcsICdEYXJrMicpICMgZm9yIEp0dSBCb3dsZXIsIEp0dSBmb290cHJpbnQsIEpiZXRhIGFuZCBIb3JuIG1vZGVscywgSnR1IHJlbTAsIEpiZXRhIHJlbTAsIEhvcm4gcmVtMApwY2hzIDwtIGMoMTYsIDE1LCAxNiwgMTYsIDE2LCAxNiwgMTYpCm9mZnMgPC0gYygwLjMsIDAuMiwgMC4xLCAwLCAtMC4xLCAtMC4yLCAtMC4zKSAjIG9mZnNldCB2ZXJ0aWNhbGx5IGZvciBlYWNoIG1vZGVsCgoKCnBhcihsYXMgPSAxLCBtYWkgPSBjKDAuNSwgNCwgMC4xLCAwLjEpKQoKcGxvdCgwLDAsIGNvbCA9ICd3aGl0ZScsIHhsaW0gPSB4bGltcywgeWxpbSA9IGMoMSxsZW5ndGgodmFyc3RvcGxvdCkpLCB5YXh0PSduJywgeGxhYiA9ICcnLCB5bGFiID0nJykKYXhpcygyLCBhdCA9IGxlbmd0aCh2YXJzdG9wbG90KToxLCBsYWJlbHMgPSB2YXJzdG9wbG90LCBjZXguYXhpcyA9IDAuNykKYWJsaW5lKHYgPSAwLCBjb2wgPSAnZ3JleScsIGx0eSA9IDIpCmFibGluZShoID0gMTpsZW5ndGgodmFyc3RvcGxvdCksIGNvbCA9ICdncmV5JywgbHR5ID0gMykKZm9yKGkgaW4gMTpsZW5ndGgodmFyc3RvcGxvdCkpewogIGlmKHZhcnN0b3Bsb3RbaV0gJWluJSByb3duYW1lcyhjb2VmcykpewogICAgeCA9IGNvZWZzW3Jvd25hbWVzKGNvZWZzKSA9PSB2YXJzdG9wbG90W2ldLCAxXQogICAgc2UgPSBjb2Vmc1tyb3duYW1lcyhjb2VmcykgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMV0sIHBjaCA9IHBjaHNbMV0sIGNvbCA9IGNvbHNbMV0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzFdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMV0pLCBjb2wgPSBjb2xzWzFdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnMyKSl7CiAgICB4ID0gY29lZnMyW3Jvd25hbWVzKGNvZWZzMikgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnMyW3Jvd25hbWVzKGNvZWZzMikgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMl0sIHBjaCA9IHBjaHNbMl0sIGNvbCA9IGNvbHNbMl0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzJdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbMl0pLCBjb2wgPSBjb2xzWzJdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnMzKSl7CiAgICB4ID0gY29lZnMzW3Jvd25hbWVzKGNvZWZzMykgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnMzW3Jvd25hbWVzKGNvZWZzMykgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbM10sIHBjaCA9IHBjaHNbM10sIGNvbCA9IGNvbHNbM10pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzNdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbM10pLCBjb2wgPSBjb2xzWzNdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnM0KSl7CiAgICB4ID0gY29lZnM0W3Jvd25hbWVzKGNvZWZzNCkgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnM0W3Jvd25hbWVzKGNvZWZzNCkgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNF0sIHBjaCA9IHBjaHNbNF0sIGNvbCA9IGNvbHNbNF0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzRdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNF0pLCBjb2wgPSBjb2xzWzRdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnM1KSl7CiAgICB4ID0gY29lZnM1W3Jvd25hbWVzKGNvZWZzNSkgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnM1W3Jvd25hbWVzKGNvZWZzNSkgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNV0sIHBjaCA9IHBjaHNbNV0sIGNvbCA9IGNvbHNbNV0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzVdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNV0pLCBjb2wgPSBjb2xzWzVdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnM2KSl7CiAgICB4ID0gY29lZnM2W3Jvd25hbWVzKGNvZWZzNikgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnM2W3Jvd25hbWVzKGNvZWZzNikgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNl0sIHBjaCA9IHBjaHNbNl0sIGNvbCA9IGNvbHNbNl0pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzZdLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbNl0pLCBjb2wgPSBjb2xzWzZdKQogIH0KICBpZih2YXJzdG9wbG90W2ldICVpbiUgcm93bmFtZXMoY29lZnM3KSl7CiAgICB4ID0gY29lZnM3W3Jvd25hbWVzKGNvZWZzNykgPT0gdmFyc3RvcGxvdFtpXSwgMV0KICAgIHNlID0gY29lZnM3W3Jvd25hbWVzKGNvZWZzNykgPT0gdmFyc3RvcGxvdFtpXSwgMl0KICAgIHBvaW50cyh4LCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbN10sIHBjaCA9IHBjaHNbN10sIGNvbCA9IGNvbHNbN10pCiAgICBsaW5lcyh4ID0gYyh4LXNlLCB4K3NlKSwgeSA9IGMobGVuZ3RoKHZhcnN0b3Bsb3QpICsgMSAtIGkgKyBvZmZzWzddLCBsZW5ndGgodmFyc3RvcGxvdCkgKyAxIC0gaSArIG9mZnNbN10pLCBjb2wgPSBjb2xzWzddKQogIH0KfQpsZWdlbmQoJ3RvcGxlZnQnLCBjb2wgPSBjb2xzLCBwY2ggPSAxNiwgbHdkID0gMSwgbGVnZW5kID0gYygnSnR1JywgJ0p0dSBmb290cHJpbnQnLCAnSmJldGEnLCAnSG9ybicsICdKdHUgcmVtMCcsICdKYmV0YSByZW0wJywgJ0hvcm4gcmVtMCcpKQpgYGAKCgoKCiMjIyMgUGxvdCBpbnRlcmFjdGlvbnMgKEphY2NhcmQgdHVybm92ZXIpCmBgYHtyIGludGVyYWN0aW9uIHBsb3RzIG1vZFRmdWxsMSwgZmlnLmhlaWdodCA9IDEzLCBmaWcud2lkdGggPSA5fQojIHNldCB1cCB0aGUgaW50ZXJhY3Rpb25zIHRvIHBsb3QKaW50cyA8LSBkYXRhLmZyYW1lKHZhcnMgPSBjKCd0c2lnbicsICd0ZW1wYXZlJywgJ3RlbXBhdmVfbWV0YWInLCAnc2VhcycsICdtaWNyb2NsaW0nLCAnbWFzcycsICdzcGVlZCcsICdsaWZlc3BhbicsICdjb25zdW1lcmZyYWMnLCAnZW5kb3RoZXJtZnJhYycsICduc3BwJywgJ3RoZXJtYWxfYmlhcycsICducHAnLCAndmVnJywgJ2h1bWFuX2Jvd2xlcicsICdodW1hbl9ib3dsZXInKSwKICAgICAgICAgICBtaW4gPSBjKDEsIC0xMCwgMTAsIDAuMSwgMCwgMCwgMCwgMC4zLCAwLCAwLCAwLjMsIC0xMCwgMS45LCAwLCAwLCAwKSwgCiAgICAgICAgICAgbWF4ID0gYygyLCAzMCwgNDAsIDE2LCA2LCA4LCAyLCAyLCAxLCAxLCAyLjYsIDEwLCAzLjcsIDEsIDksIDkpLAogICAgICAgICAgIGxvZyA9IGMoRiwgRiwgRiwgRiwgRiwgVCwgVCwgVCwgRiwgRiwgVCwgRiwgVCwgRiwgRiwgRiksCiAgICAgICAgICAgbGVuID0gYygyLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwKSwKICAgICAgICAgICBkaXNjcmV0ZSA9IGMoVCwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiksCiAgICAgICAgICAgUkVBTE0gPSBjKHJlcCgnRnJlc2h3YXRlcicsIDE1KSwgJ01hcmluZScpLAogICAgICAgICAgIFJFQUxNMiA9IGMocmVwKCdUZXJyRnJlc2gnLCAxNSksICdNYXJpbmUnKSwKICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCmJhc2V0YWIgPC0gZGF0YS5mcmFtZSh0ZW1wYXZlLnNjID0gMCwgdGVtcGF2ZV9tZXRhYi5zYyA9IDAsIAogICAgICAgICAgICAgICAgICAgICAgc2Vhcy5zYyA9IDAsIG1pY3JvY2xpbS5zYyA9IDAsIG1hc3Muc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICAgIHNwZWVkLnNjID0gMCwgbGlmZXNwYW4uc2MgPSAwLCBlbmRvdGhlcm1mcmFjLnNjID0gMCwgCiAgICAgICAgICAgICAgICAgICAgICBuc3BwLnNjID0gMCwgdGhlcm1hbF9iaWFzLnNjID0gMCwgbnBwLnNjID0gMCwgaHVtYW5fYm93bGVyLnNjID0gMCwgdmVnLnNjID0gMCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBueXJCVCA9IDIwLCBTVFVEWV9JRCA9IDEyN0wsIHJhcmVmeUlEID0gJzEyN181MTQ2NjgnKQoKIyBtYWtlIHRoZSBkYXRhIGZyYW1lcyBmb3IgZWFjaCBpbnRlcmFjdGlvbiB0byBwbG90ICAgICAgICAgICAgICAgIApmb3IoaiBpbiAxOm5yb3coaW50cykpewogICMgc2V0IHVwIGEgZ3JpZCBvZiB0ZW1wZXJhdHVyZSB0cmVuZHMgYW5kIHRoZSBpbnRlcmFjdGluZyB2YXJpYWJsZQogIGlmKGludHMkbG9nW2pdKSBpbnR2YXJzIDwtIGxpc3QodGVtcHRyZW5kID0gc2VxKC0xLjUsIDEuNSwgbGVuZ3RoLm91dCA9IDEwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ID0gMTBec2VxKGludHMkbWluW2pdLCBpbnRzJG1heFtqXSwgbGVuZ3RoLm91dCA9IGludHMkbGVuW2pdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgPSBpbnRzJHZhcnNbal0pCiAgaWYoIWludHMkbG9nW2pdKSBpbnR2YXJzIDwtIGxpc3QodGVtcHRyZW5kID0gc2VxKC0xLjUsIDEuNSwgbGVuZ3RoLm91dCA9IDEwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyA9IHNlcShpbnRzJG1pbltqXSwgaW50cyRtYXhbal0sIGxlbmd0aC5vdXQgPSBpbnRzJGxlbltqXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyID0gaW50cyR2YXJzW2pdKQogIG5hbWVzKGludHZhcnMpIDwtIGMoJ3RlbXB0cmVuZCcsIGludHMkdmFyc1tqXSwgJ3ZhcicpCiAgdGhpc2RhdCA8LSBleHBhbmQuZ3JpZChpbnR2YXJzKQogIAogICMgc2NhbGUgdGhlIGludGVyYWN0aW5nIHZhcmlhYmxlCiAgY2VudCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpjZW50ZXInKQogIHNjbCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpzY2FsZScpCiAgaWYoIWlzLm51bGwoY2VudCkgJiAhaXMubnVsbChzY2wpKXsKICAgIGlmKGludHMkbG9nW2pdKSB0aGlzZGF0W1twYXN0ZTAoaW50cyR2YXJbal0sICcuc2MnKV1dIDwtIChsb2codGhpc2RhdFtbaW50cyR2YXJbal1dXSkgLSBjZW50KS9zY2wKICAgIGlmKCFpbnRzJGxvZ1tqXSkgdGhpc2RhdFtbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSA8LSAodGhpc2RhdFtbaW50cyR2YXJbal1dXSAtIGNlbnQpL3NjbAogIH0KCiAgIyBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zCiAgaWYoaW50cyR2YXJbal0gIT0gJ3RzaWduJykgY29sbmFtZXN0b3VzZSA8LSBzZXRkaWZmKGNvbG5hbWVzKGJhc2V0YWIpLCBwYXN0ZTAoaW50cyR2YXJbal0sICcuc2MnKSkKICBpZihpbnRzJHZhcltqXSA9PSAndHNpZ24nKSBjb2xuYW1lc3RvdXNlIDwtIHNldGRpZmYoY29sbmFtZXMoYmFzZXRhYiksIGludHMkdmFyW2pdKQogIHRoaXNkYXQgPC0gY2JpbmQodGhpc2RhdCwgYmFzZXRhYlssIGNvbG5hbWVzdG91c2VdKQoKICAjIGFkZCByZWFsbQogIHRoaXNkYXQkUkVBTE0gPC0gaW50cyRSRUFMTVtqXQogIHRoaXNkYXQkUkVBTE0yIDwtIGludHMkUkVBTE0yW2pdCiAgCiAgIyBtZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBpdGVyYXRpb25zCiAgaWYoaiA9PSAxKSBuZXdkYXQgPC0gdGhpc2RhdAogIGlmKGogPiAxKXsKICAgIGNvbHN0b2FkZCA8LSBzZXRkaWZmKGNvbG5hbWVzKHRoaXNkYXQpLCBjb2xuYW1lcyhuZXdkYXQpKQogICAgZm9yKHRvYWRkIGluIGNvbHN0b2FkZCl7CiAgICAgIG5ld2RhdFtbdG9hZGRdXSA8LSBOQQogICAgfQogICAgCiAgICBjb2xzdG9hZGQyIDwtIHNldGRpZmYoY29sbmFtZXMobmV3ZGF0KSwgY29sbmFtZXModGhpc2RhdCkpCiAgICBmb3IodG9hZGQgaW4gY29sc3RvYWRkMil7CiAgICAgIHRoaXNkYXRbW3RvYWRkXV0gPC0gTkEKICAgIH0KICAgIAogICAgbmV3ZGF0IDwtIHJiaW5kKG5ld2RhdCwgdGhpc2RhdCkKICB9IAp9CgojIGNoYXJhY3RlciBzbyB0aGF0IG5ldyBsZXZlbHMgY2FuIGJlIGFkZGVkCm5ld2RhdCRSRUFMTSA8LSBhcy5jaGFyYWN0ZXIobmV3ZGF0JFJFQUxNKQpuZXdkYXQkUkVBTE0yIDwtIGFzLmNoYXJhY3RlcihuZXdkYXQkUkVBTE0yKQoKIyBhZGQgZXh0cmEgcm93cyBzbyB0aGF0IGFsbCBmYWN0b3IgbGV2ZWxzIGFyZSByZXByZXNlbnRlZCAoZm9yIHByZWRpY3QubG1lIHRvIHdvcmspCm5ld2RhdCA8LSByYmluZChuZXdkYXRbMTo0LCBdLCBuZXdkYXQpCm5ld2RhdCRSRUFMTVsxOjRdIDwtIGMoJ01hcmluZScsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnLCAnVGVycmVzdHJpYWwnKQpuZXdkYXQkUkVBTE0yWzE6NF0gPC0gYygnTWFyaW5lJywgJ01hcmluZScsICdUZXJyRnJlc2gnLCAnVGVyckZyZXNoJykKbmV3ZGF0JHRlbXB0cmVuZFsxOjRdIDwtIGMoLTEsIDEsIC0xLCAxKQoKIyB0cmltIHRvIGF0IGxlYXN0IHNvbWUgdGVtcGVyYXR1cmUgY2hhbmdlIChzbyB0aGF0IHRzaWduIGlzIC0xIG9yIDEpCm5ld2RhdCA8LSBuZXdkYXRbbmV3ZGF0JHRlbXB0cmVuZCAhPSAwLF0KCiMgc2NhbGUgdGhlIHRlbXBlcmF0dXJlIHZhcnMKbmV3ZGF0JHRlbXB0cmVuZC5zYyA8LSBuZXdkYXQkdGVtcHRyZW5kL2F0dHIodHJlbmRzJHRlbXB0cmVuZC5zYywgJ3NjYWxlZDpzY2FsZScpIApuZXdkYXQkdGVtcHRyZW5kX2FicyA8LSBhYnMobmV3ZGF0JHRlbXB0cmVuZCkKbmV3ZGF0JHRlbXB0cmVuZF9hYnMuc2MgPC0gKG5ld2RhdCR0ZW1wdHJlbmRfYWJzKS9hdHRyKHRyZW5kcyR0ZW1wdHJlbmRfYWJzLnNjLCAnc2NhbGVkOnNjYWxlJykKbmV3ZGF0JHRzaWduIDwtIGZhY3RvcihzaWduKG5ld2RhdCR0ZW1wdHJlbmQpKQoKIyBtYWtlIHByZWRpY3Rpb25zCm5ld2RhdCRwcmVkcyA8LSBwcmVkaWN0KG9iamVjdCA9IG1vZFRmdWxsMSwgbmV3ZGF0YSA9IG5ld2RhdCwgbGV2ZWwgPSAwKQoKI3JlbW92ZSB0aGUgZXh0cmEgcm93cwpuZXdkYXQgPC0gbmV3ZGF0WzU6bnJvdyhuZXdkYXQpLCBdCgojIHByZXAgdGhlIHBsb3RzCmludHBsb3RzIDwtIHZlY3RvcignbGlzdCcsIG5yb3coaW50cykpCmZvcihqIGluIDE6bGVuZ3RoKGludHBsb3RzKSl7CiAgc3VicyA8LSBuZXdkYXQkdmFyID09IGludHMkdmFyc1tqXSAmIG5ld2RhdCR0ZW1wdHJlbmQgPiAwICMgc2VsZWN0IHdhcm1pbmcgc2lkZQogIHh2YXIgPC0gJ3RlbXB0cmVuZF9hYnMnCiAgdGl0bGUgPC0gaW50cyR2YXJzW2pdCiAgaWYoaW50cyR2YXJzW2pdICVpbiUgYygndHNpZ24nKSl7CiAgICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdCiAgfSAKICBpZihpbnRzJHZhcnNbal0gJWluJSBjKCd0aGVybWFsX2JpYXMnKSl7CiAgICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdCiAgICB4dmFyIDwtICd0ZW1wdHJlbmQnCiAgfSAKICBpZihpbnRzJHZhcnNbal0gJWluJSBjKCdodW1hbl9ib3dsZXInKSl7CiAgICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdICYgbmV3ZGF0JHRlbXB0cmVuZCA+IDAgJiBuZXdkYXQkUkVBTE0yID09IGludHMkUkVBTE0yW2pdCiAgICB0aXRsZSA8LSBwYXN0ZTAoJ2h1bWFuOicsIGludHMkUkVBTE0yW2pdKQogIH0gCgogIHRoaXNwbG90IDwtIGdncGxvdChuZXdkYXRbc3VicywgXSwgCiAgICAgICAgICAgICAgICAgICAgIGFlc19zdHJpbmcoeCA9IHh2YXIsIHkgPSAncHJlZHMnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IGludHMkdmFyc1tqXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBpbnRzJHZhcnNbal0pKSArCiAgICBnZW9tX2xpbmUoKSArCiAgICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMCwgMSkpICsKICAgIHRoZW1lKHBsb3QubWFyZ2luID0gdW5pdChjKDAuNSwwLDAuNSwwKSwgJ2NtJykpICsKICAgIGxhYnModGl0bGUgPSB0aXRsZSkKICBpZihpbnRzJGxvZ1tqXSAmICFpbnRzJGRpc2NyZXRlW2pdKXsKICAgIGludHBsb3RzW1tqXV0gPC0gdGhpc3Bsb3QgKyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJZbEduQnUiLCB0cmFucyA9ICdsb2cnKQogIH0KICBpZighaW50cyRsb2dbal0gJiAhaW50cyRkaXNjcmV0ZVtqXSl7CiAgICBpbnRwbG90c1tbal1dIDwtIHRoaXNwbG90ICsgc2NhbGVfY29sb3JfZGlzdGlsbGVyKHBhbGV0dGUgPSAiWWxHbkJ1IiwgdHJhbnMgPSAnaWRlbnRpdHknKQogIH0KICBpZihpbnRzJGRpc2NyZXRlW2pdKXsKICAgIGludHBsb3RzW1tqXV0gPC0gdGhpc3Bsb3QgKyBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpCiAgfQp9CgojZ3JpZC5hcnJhbmdlKGdyb2JzID0gaW50cGxvdHMsICcrJywgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMCwwLDAsMCksICdjbScpKSksIG5jb2w9MikKI2RvLmNhbGwoJ2dyaWQuYXJyYW5nZScsIGMoaW50cGxvdHMsIG5jb2wgPSAyKSkKZ3JpZC5hcnJhbmdlKGdyb2JzID0gaW50cGxvdHMsIG5jb2wgPSAzKQoKYGBgClBvc2l0aXZlIHRoZXJtYWwgYmlhcyBtZWFucyB0aGF0IHRoZSBzcGVjaWVzIGluIHRoZSBhc3NlbWJsYWdlIGhhdmUgd2FybWVyIHRoZXJtYWwgbmljaGVzIHRoYW4gdGhlIGVudmlyb25tZW50IChhbmQgdmljZSB2ZXJzYSkuIAoKCiMjIyMgUGxvdCBpbnRlcmFjdGlvbnMgKEphY2NhcmQgdHVybm92ZXIpIHdpdGhvdXQgeWVhciAxCmBgYHtyIGludGVyYWN0aW9uIHBsb3RzIG1vZFRmdWxscmVtMCwgZmlnLmhlaWdodCA9IDEzLCBmaWcud2lkdGggPSA5fQojIHNldCB1cCB0aGUgaW50ZXJhY3Rpb25zIHRvIHBsb3QKaW50cyA8LSBkYXRhLmZyYW1lKHZhcnMgPSBjKCd0c2lnbicsICd0ZW1wYXZlJywgJ3RlbXBhdmVfbWV0YWInLCAnc2VhcycsICdtaWNyb2NsaW0nLCAnbWFzcycsICdzcGVlZCcsICdsaWZlc3BhbicsICdjb25zdW1lcmZyYWMnLCAnZW5kb3RoZXJtZnJhYycsICduc3BwJywgJ3RoZXJtYWxfYmlhcycsICducHAnLCAndmVnJywgJ2h1bWFuX2Jvd2xlcicsICdodW1hbl9ib3dsZXInKSwKICAgICAgICAgICBtaW4gPSBjKDEsIC0xMCwgMTAsIDAuMSwgMCwgMCwgMCwgMC4zLCAwLCAwLCAwLjMsIC0xMCwgMS45LCAwLCAwLCAwKSwgCiAgICAgICAgICAgbWF4ID0gYygyLCAzMCwgNDAsIDE2LCA2LCA4LCAyLCAyLCAxLCAxLCAyLjYsIDEwLCAzLjcsIDEsIDksIDkpLAogICAgICAgICAgIGxvZyA9IGMoRiwgRiwgRiwgRiwgRiwgVCwgVCwgVCwgRiwgRiwgVCwgRiwgVCwgRiwgRiwgRiksCiAgICAgICAgICAgbGVuID0gYygyLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwKSwKICAgICAgICAgICBkaXNjcmV0ZSA9IGMoVCwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiksCiAgICAgICAgICAgUkVBTE0gPSBjKHJlcCgnRnJlc2h3YXRlcicsIDE1KSwgJ01hcmluZScpLAogICAgICAgICAgIFJFQUxNMiA9IGMocmVwKCdUZXJyRnJlc2gnLCAxNSksICdNYXJpbmUnKSwKICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCmJhc2V0YWIgPC0gZGF0YS5mcmFtZSh0ZW1wYXZlLnNjID0gMCwgdGVtcGF2ZV9tZXRhYi5zYyA9IDAsIAogICAgICAgICAgICAgICAgICAgICAgc2Vhcy5zYyA9IDAsIG1pY3JvY2xpbS5zYyA9IDAsIG1hc3Muc2MgPSAwLCAKICAgICAgICAgICAgICAgICAgICAgIHNwZWVkLnNjID0gMCwgbGlmZXNwYW4uc2MgPSAwLCBlbmRvdGhlcm1mcmFjLnNjID0gMCwgCiAgICAgICAgICAgICAgICAgICAgICBuc3BwLnNjID0gMCwgdGhlcm1hbF9iaWFzLnNjID0gMCwgbnBwLnNjID0gMCwgaHVtYW5fYm93bGVyLnNjID0gMCwgdmVnLnNjID0gMCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBueXJCVCA9IDIwLCBTVFVEWV9JRCA9IDEyN0wsIHJhcmVmeUlEID0gJzEyN181MTQ2NjgnKQoKIyBtYWtlIHRoZSBkYXRhIGZyYW1lcyBmb3IgZWFjaCBpbnRlcmFjdGlvbiB0byBwbG90ICAgICAgICAgICAgICAgIApmb3IoaiBpbiAxOm5yb3coaW50cykpewogICMgc2V0IHVwIGEgZ3JpZCBvZiB0ZW1wZXJhdHVyZSB0cmVuZHMgYW5kIHRoZSBpbnRlcmFjdGluZyB2YXJpYWJsZQogIGlmKGludHMkbG9nW2pdKSBpbnR2YXJzIDwtIGxpc3QodGVtcHRyZW5kID0gc2VxKC0xLjUsIDEuNSwgbGVuZ3RoLm91dCA9IDEwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3ID0gMTBec2VxKGludHMkbWluW2pdLCBpbnRzJG1heFtqXSwgbGVuZ3RoLm91dCA9IGludHMkbGVuW2pdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgPSBpbnRzJHZhcnNbal0pCiAgaWYoIWludHMkbG9nW2pdKSBpbnR2YXJzIDwtIGxpc3QodGVtcHRyZW5kID0gc2VxKC0xLjUsIDEuNSwgbGVuZ3RoLm91dCA9IDEwMCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyA9IHNlcShpbnRzJG1pbltqXSwgaW50cyRtYXhbal0sIGxlbmd0aC5vdXQgPSBpbnRzJGxlbltqXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyID0gaW50cyR2YXJzW2pdKQogIG5hbWVzKGludHZhcnMpIDwtIGMoJ3RlbXB0cmVuZCcsIGludHMkdmFyc1tqXSwgJ3ZhcicpCiAgdGhpc2RhdCA8LSBleHBhbmQuZ3JpZChpbnR2YXJzKQogIAogICMgc2NhbGUgdGhlIGludGVyYWN0aW5nIHZhcmlhYmxlCiAgY2VudCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpjZW50ZXInKQogIHNjbCA8LSBhdHRyKHRyZW5kc1tbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSwgJ3NjYWxlZDpzY2FsZScpCiAgaWYoIWlzLm51bGwoY2VudCkgJiAhaXMubnVsbChzY2wpKXsKICAgIGlmKGludHMkbG9nW2pdKSB0aGlzZGF0W1twYXN0ZTAoaW50cyR2YXJbal0sICcuc2MnKV1dIDwtIChsb2codGhpc2RhdFtbaW50cyR2YXJbal1dXSkgLSBjZW50KS9zY2wKICAgIGlmKCFpbnRzJGxvZ1tqXSkgdGhpc2RhdFtbcGFzdGUwKGludHMkdmFyW2pdLCAnLnNjJyldXSA8LSAodGhpc2RhdFtbaW50cyR2YXJbal1dXSAtIGNlbnQpL3NjbAogIH0KCiAgIyBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zCiAgaWYoaW50cyR2YXJbal0gIT0gJ3RzaWduJykgY29sbmFtZXN0b3VzZSA8LSBzZXRkaWZmKGNvbG5hbWVzKGJhc2V0YWIpLCBwYXN0ZTAoaW50cyR2YXJbal0sICcuc2MnKSkKICBpZihpbnRzJHZhcltqXSA9PSAndHNpZ24nKSBjb2xuYW1lc3RvdXNlIDwtIHNldGRpZmYoY29sbmFtZXMoYmFzZXRhYiksIGludHMkdmFyW2pdKQogIHRoaXNkYXQgPC0gY2JpbmQodGhpc2RhdCwgYmFzZXRhYlssIGNvbG5hbWVzdG91c2VdKQoKICAjIGFkZCByZWFsbQogIHRoaXNkYXQkUkVBTE0gPC0gaW50cyRSRUFMTVtqXQogIHRoaXNkYXQkUkVBTE0yIDwtIGludHMkUkVBTE0yW2pdCiAgCiAgIyBtZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBpdGVyYXRpb25zCiAgaWYoaiA9PSAxKSBuZXdkYXQgPC0gdGhpc2RhdAogIGlmKGogPiAxKXsKICAgIGNvbHN0b2FkZCA8LSBzZXRkaWZmKGNvbG5hbWVzKHRoaXNkYXQpLCBjb2xuYW1lcyhuZXdkYXQpKQogICAgZm9yKHRvYWRkIGluIGNvbHN0b2FkZCl7CiAgICAgIG5ld2RhdFtbdG9hZGRdXSA8LSBOQQogICAgfQogICAgCiAgICBjb2xzdG9hZGQyIDwtIHNldGRpZmYoY29sbmFtZXMobmV3ZGF0KSwgY29sbmFtZXModGhpc2RhdCkpCiAgICBmb3IodG9hZGQgaW4gY29sc3RvYWRkMil7CiAgICAgIHRoaXNkYXRbW3RvYWRkXV0gPC0gTkEKICAgIH0KICAgIAogICAgbmV3ZGF0IDwtIHJiaW5kKG5ld2RhdCwgdGhpc2RhdCkKICB9IAp9CgojIGNoYXJhY3RlciBzbyB0aGF0IG5ldyBsZXZlbHMgY2FuIGJlIGFkZGVkCm5ld2RhdCRSRUFMTSA8LSBhcy5jaGFyYWN0ZXIobmV3ZGF0JFJFQUxNKQpuZXdkYXQkUkVBTE0yIDwtIGFzLmNoYXJhY3RlcihuZXdkYXQkUkVBTE0yKQoKIyBhZGQgZXh0cmEgcm93cyBzbyB0aGF0IGFsbCBmYWN0b3IgbGV2ZWxzIGFyZSByZXByZXNlbnRlZCAoZm9yIHByZWRpY3QubG1lIHRvIHdvcmspCm5ld2RhdCA8LSByYmluZChuZXdkYXRbMTo0LCBdLCBuZXdkYXQpCm5ld2RhdCRSRUFMTVsxOjRdIDwtIGMoJ01hcmluZScsICdNYXJpbmUnLCAnVGVycmVzdHJpYWwnLCAnVGVycmVzdHJpYWwnKQpuZXdkYXQkUkVBTE0yWzE6NF0gPC0gYygnTWFyaW5lJywgJ01hcmluZScsICdUZXJyRnJlc2gnLCAnVGVyckZyZXNoJykKbmV3ZGF0JHRlbXB0cmVuZFsxOjRdIDwtIGMoLTEsIDEsIC0xLCAxKQoKIyB0cmltIHRvIGF0IGxlYXN0IHNvbWUgdGVtcGVyYXR1cmUgY2hhbmdlIChzbyB0aGF0IHRzaWduIGlzIC0xIG9yIDEpCm5ld2RhdCA8LSBuZXdkYXRbbmV3ZGF0JHRlbXB0cmVuZCAhPSAwLF0KCiMgc2NhbGUgdGhlIHRlbXBlcmF0dXJlIHZhcnMKbmV3ZGF0JHRlbXB0cmVuZC5zYyA8LSBuZXdkYXQkdGVtcHRyZW5kL2F0dHIodHJlbmRzJHRlbXB0cmVuZC5zYywgJ3NjYWxlZDpzY2FsZScpIApuZXdkYXQkdGVtcHRyZW5kX2FicyA8LSBhYnMobmV3ZGF0JHRlbXB0cmVuZCkKbmV3ZGF0JHRlbXB0cmVuZF9hYnMuc2MgPC0gKG5ld2RhdCR0ZW1wdHJlbmRfYWJzKS9hdHRyKHRyZW5kcyR0ZW1wdHJlbmRfYWJzLnNjLCAnc2NhbGVkOnNjYWxlJykKbmV3ZGF0JHRzaWduIDwtIGZhY3RvcihzaWduKG5ld2RhdCR0ZW1wdHJlbmQpKQoKIyBtYWtlIHByZWRpY3Rpb25zCm5ld2RhdCRwcmVkcyA8LSBwcmVkaWN0KG9iamVjdCA9IG1vZFRmdWxscmVtMCwgbmV3ZGF0YSA9IG5ld2RhdCwgbGV2ZWwgPSAwKQoKI3JlbW92ZSB0aGUgZXh0cmEgcm93cwpuZXdkYXQgPC0gbmV3ZGF0WzU6bnJvdyhuZXdkYXQpLCBdCgojIHByZXAgdGhlIHBsb3RzCmludHBsb3RzIDwtIHZlY3RvcignbGlzdCcsIG5yb3coaW50cykpCmZvcihqIGluIDE6bGVuZ3RoKGludHBsb3RzKSl7CiAgc3VicyA8LSBuZXdkYXQkdmFyID09IGludHMkdmFyc1tqXSAmIG5ld2RhdCR0ZW1wdHJlbmQgPiAwICMgc2VsZWN0IHdhcm1pbmcgc2lkZQogIHh2YXIgPC0gJ3RlbXB0cmVuZF9hYnMnCiAgdGl0bGUgPC0gaW50cyR2YXJzW2pdCiAgaWYoaW50cyR2YXJzW2pdICVpbiUgYygndHNpZ24nKSl7CiAgICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdCiAgfSAKICBpZihpbnRzJHZhcnNbal0gJWluJSBjKCd0aGVybWFsX2JpYXMnKSl7CiAgICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdCiAgICB4dmFyIDwtICd0ZW1wdHJlbmQnCiAgfSAKICBpZihpbnRzJHZhcnNbal0gJWluJSBjKCdodW1hbl9ib3dsZXInKSl7CiAgICBzdWJzIDwtIG5ld2RhdCR2YXIgPT0gaW50cyR2YXJzW2pdICYgbmV3ZGF0JHRlbXB0cmVuZCA+IDAgJiBuZXdkYXQkUkVBTE0yID09IGludHMkUkVBTE0yW2pdCiAgICB0aXRsZSA8LSBwYXN0ZTAoJ2h1bWFuOicsIGludHMkUkVBTE0yW2pdKQogIH0gCgogIHRoaXNwbG90IDwtIGdncGxvdChuZXdkYXRbc3VicywgXSwgCiAgICAgICAgICAgICAgICAgICAgIGFlc19zdHJpbmcoeCA9IHh2YXIsIHkgPSAncHJlZHMnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IGludHMkdmFyc1tqXSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBpbnRzJHZhcnNbal0pKSArCiAgICBnZW9tX2xpbmUoKSArCiAgICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoLTAuNiwgMC42KSkgKwogICAgdGhlbWUocGxvdC5tYXJnaW4gPSB1bml0KGMoMC41LDAsMC41LDApLCAnY20nKSkgKwogICAgbGFicyh0aXRsZSA9IHRpdGxlKQogIGlmKGludHMkbG9nW2pdICYgIWludHMkZGlzY3JldGVbal0pewogICAgaW50cGxvdHNbW2pdXSA8LSB0aGlzcGxvdCArIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIllsR25CdSIsIHRyYW5zID0gJ2xvZycpCiAgfQogIGlmKCFpbnRzJGxvZ1tqXSAmICFpbnRzJGRpc2NyZXRlW2pdKXsKICAgIGludHBsb3RzW1tqXV0gPC0gdGhpc3Bsb3QgKyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJZbEduQnUiLCB0cmFucyA9ICdpZGVudGl0eScpCiAgfQogIGlmKGludHMkZGlzY3JldGVbal0pewogICAgaW50cGxvdHNbW2pdXSA8LSB0aGlzcGxvdCArIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikKICB9Cn0KCiNncmlkLmFycmFuZ2UoZ3JvYnMgPSBpbnRwbG90cywgJysnLCB0aGVtZShwbG90Lm1hcmdpbiA9IHVuaXQoYygwLDAsMCwwKSwgJ2NtJykpKSwgbmNvbD0yKQojZG8uY2FsbCgnZ3JpZC5hcnJhbmdlJywgYyhpbnRwbG90cywgbmNvbCA9IDIpKQpncmlkLmFycmFuZ2UoZ3JvYnMgPSBpbnRwbG90cywgbmNvbCA9IDMpCgpgYGAKCiMjIyMgUGxvdCByZXNpZHVhbHMgYWdhaW5zdCBlYWNoIHByZWRpY3RvciAoSmFjY2FyZCB0dXJub3ZlcikKYGBge3IgcmVzaWRzIG1vZFRmdWxsMSwgZmlnLmhlaWdodCA9IDEwLCBmaWcud2lkdGg9MTB9CnJlc2lkcyA8LSByZXNpZChtb2RUZnVsbDEpCnByZWRzIDwtIGdldERhdGEobW9kVGZ1bGwxKQpjb2wgPSAnIzAwMDAwMDMzJwpjZXggPSAwLjUKcGFyKG1mcm93ID0gYyg1LDQpKQpib3hwbG90KHJlc2lkcyB+IHByZWRzJFJFQUxNLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR0ZW1wdHJlbmRfYWJzLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJHRzaWduLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJHRlbXBhdmUuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkdGVtcGF2ZV9tZXRhYi5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRzZWFzLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJG1pY3JvY2xpbS5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRtYXNzLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJHNwZWVkLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJGxpZmVzcGFuLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJGNvbnN1bWVyZnJhYy5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyRlbmRvdGhlcm1mcmFjLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJG5zcHAuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkdGhlcm1hbF9iaWFzLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpwbG90KHByZWRzJG5wcC5zYywgcmVzaWRzLCBjZXggPSBjZXgsIGNvbCA9IGNvbCkKcGxvdChwcmVkcyR2ZWcuc2MsIHJlc2lkcywgY2V4ID0gY2V4LCBjb2wgPSBjb2wpCnBsb3QocHJlZHMkaHVtYW5fYm93bGVyLnNjLCByZXNpZHMsIGNleCA9IGNleCwgY29sID0gY29sKQpgYGAKCiMjIyBSZW1vdmUgZWFjaCB0ZXJtIGZyb20gdGhlIGZ1bGwgbW9kZWwKIyMjIyBKYWNjYXJkIHR1cm5vdmVyCmBgYHtyIHRlcm0gZGVsZXRpb24gZnJvbSBtb2RUZnVsbDF9CgppZihmaWxlLmV4aXN0cygnb3V0cHV0L2FpY3NfZnJvbV9mdWxsLmNzdicpKXsKICBhaWNzZnJvbWZ1bGwgPC0gcmVhZC5jc3YoJ291dHB1dC9haWNzX2Zyb21fZnVsbC5jc3YnKQoKfSBlbHNlIHsKICBpIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEp0dXRyZW5kLCBSRUFMTSwgdGVtcGF2ZS5zYywgdGVtcGF2ZV9tZXRhYi5zYywgc2Vhcy5zYywgbWljcm9jbGltLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXB0cmVuZF9hYnMuc2MsIG1hc3Muc2MsIHNwZWVkLnNjLCBsaWZlc3Bhbi5zYywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lcmZyYWMuc2MsIGVuZG90aGVybWZyYWMuc2MsIG5zcHAuc2MsIHRoZXJtYWxfYmlhcy5zYywgbnBwLnNjLCB2ZWcuc2MsIGh1bWFuX2Jvd2xlci5zYyldCiAgCiAgcmFuZGVmIDwtIGxpc3QoU1RVRFlfSUQgPSB+IHRlbXB0cmVuZF9hYnMuc2MsIHJhcmVmeUlEID0gfjEpCiAgdmFyZWYgPC0gdmFyUG93ZXIoLTAuNSwgfm55ckJUKQogIAogIHRlcm1zIDwtIGMoJ3RlbXB0cmVuZF9hYnMuc2MqUkVBTE0nLCAKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnRzaWduJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnRlbXBhdmUuc2MnLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZV9tZXRhYi5zYycsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypzZWFzLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKm1pY3JvY2xpbS5zYycsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYyptYXNzLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnNwZWVkLnNjJywgCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypsaWZlc3Bhbi5zYycsIAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqY29uc3VtZXJmcmFjLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKmVuZG90aGVybWZyYWMuc2MnLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqbnNwcC5zYycsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYyp0aGVybWFsX2JpYXMuc2M6dHNpZ24nLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqbnBwLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnZlZy5zYycsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypodW1hbl9ib3dsZXIuc2M6UkVBTE0yJykKICBtb2RUZHJvcHMgPC0gdmVjdG9yKCdsaXN0JywgbGVuZ3RoKHRlcm1zKSsyKQogIG5hbWVzKG1vZFRkcm9wcykgPC0gYygnZnVsbCcsICctdGVtcHRyZW5kX2Ficy5zYycsIHBhc3RlMCgnLScsIHRlcm1zKSkKICAKICAjIGZpdCBmdWxsIG1vZGVsIHdpdGggTUwgZm9yIG1vZGVsIGNvbXBhcmlzb24KICBtb2RUZHJvcHNbWzFdXSA8LSBsbWUoZm9ybXVsYShwYXN0ZTAoJ0p0dXRyZW5kIH4gJywgcGFzdGUodGVybXMsIGNvbGxhcHNlID0gJyArICcpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2ksXSwgbWV0aG9kID0gJ01MJykKICAKICAjIHcvb3V0IHRlbXB0cmVuZAogIG1vZFRkcm9wc1tbMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSnR1dHJlbmQgfiAnLCBwYXN0ZShnc3ViKCd0ZW1wdHJlbmRfYWJzLnNjXFwqJywgJycsIHRlcm1zKSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdChTVFVEWV9JRCA9IH4gMSwgcmFyZWZ5SUQgPSB+MSksIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpLF0sIG1ldGhvZCA9ICdNTCcpCiAgCiAgZm9yKGogaW4gMTpsZW5ndGgodGVybXMpKXsKICAgIHByaW50KGopCiAgICBtb2RUZHJvcHNbW2orMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSnR1dHJlbmQgfiAnLCBwYXN0ZSh0ZXJtc1stal0sIGNvbGxhcHNlID0gJyArICcpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpLF0sIG1ldGhvZCA9ICdNTCcpCiAgfQogIAogIGFpY3MgPC0gc2FwcGx5KG1vZFRkcm9wcywgQUlDKQogIAogIGFpY3Nmcm9tZnVsbCA8LSBkYXRhLmZyYW1lKG1vZCA9IG5hbWVzKGFpY3MpLCBkQUlDX0p0dSA9IGFpY3MgLSBhaWNzWzFdKQogIAogIHdyaXRlLmNzdihhaWNzZnJvbWZ1bGwsIGZpbGUgPSAnb3V0cHV0L2FpY3NfZnJvbV9mdWxsLmNzdicsIHJvdy5uYW1lcyA9IEZBTFNFKQp9CgphaWNzZnJvbWZ1bGwKYGBgCgoKIyMjIyBKYmV0YSBhbmQgSG9ybiBtb2RlbHMKYGBge3IgdGVybSBkZWxldGlvbiBmcm9tIEpiZXRhIGFuZCBIb3JuIG1vZGVsc30KCmlmKGZpbGUuZXhpc3RzKCdvdXRwdXQvYWljc19mcm9tX2Z1bGwuY3N2JykpewogIGFpY3Nmcm9tZnVsbCA8LSByZWFkLmNzdignb3V0cHV0L2FpY3NfZnJvbV9mdWxsLmNzdicpCiAgCiAgaWYoYWxsKGMoJ2RBSUNfSmJldGEnLCAnZEFJQ19Ib3JuJykgJWluJSBjb2xuYW1lcyhhaWNzZnJvbWZ1bGwpKSl7CiAgICBydW5KYmV0YUhvcm4gPC0gRkFMU0UKICB9IGVsc2UgewogICAgcnVuSmJldGFIb3JuIDwtIFRSVUUKICB9Cn0gZWxzZSB7CiAgcnVuSmJldGFIb3JuIDwtIFRSVUUKfQoKaWYocnVuSmJldGFIb3JuKXsKICBpIDwtIHRyZW5kc1ssIGNvbXBsZXRlLmNhc2VzKEpiZXRhdHJlbmQsIFJFQUxNLCB0ZW1wYXZlLnNjLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIHZlZy5zYywgaHVtYW5fYm93bGVyLnNjKV0KICBpMiA8LSB0cmVuZHNbLCBjb21wbGV0ZS5jYXNlcyhIb3JudHJlbmQsIFJFQUxNLCB0ZW1wYXZlLnNjLCB0ZW1wYXZlX21ldGFiLnNjLCBzZWFzLnNjLCBtaWNyb2NsaW0uc2MsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcHRyZW5kX2Ficy5zYywgbWFzcy5zYywgc3BlZWQuc2MsIGxpZmVzcGFuLnNjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyZnJhYy5zYywgZW5kb3RoZXJtZnJhYy5zYywgbnNwcC5zYywgdGhlcm1hbF9iaWFzLnNjLCBucHAuc2MsIHZlZy5zYywgaHVtYW5fYm93bGVyLnNjKV0KICAKICByYW5kZWYgPC0gbGlzdChTVFVEWV9JRCA9IH4gdGVtcHRyZW5kX2Ficy5zYywgcmFyZWZ5SUQgPSB+MSkKICB2YXJlZiA8LSB2YXJQb3dlcigtMC41LCB+bnlyQlQpCiAgCiAgdGVybXMgPC0gYygndGVtcHRyZW5kX2Ficy5zYypSRUFMTScsIAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqdHNpZ24nLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqdGVtcGF2ZS5zYycsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYyp0ZW1wYXZlX21ldGFiLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnNlYXMuc2MnLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqbWljcm9jbGltLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKm1hc3Muc2MnLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2Mqc3BlZWQuc2MnLCAKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKmxpZmVzcGFuLnNjJywgCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypjb25zdW1lcmZyYWMuc2MnLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqZW5kb3RoZXJtZnJhYy5zYycsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypuc3BwLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKnRoZXJtYWxfYmlhcy5zYzp0c2lnbicsCiAgICAgICAgICAgICAndGVtcHRyZW5kX2Ficy5zYypucHAuc2MnLAogICAgICAgICAgICAgJ3RlbXB0cmVuZF9hYnMuc2MqdmVnLnNjJywKICAgICAgICAgICAgICd0ZW1wdHJlbmRfYWJzLnNjKmh1bWFuX2Jvd2xlci5zYzpSRUFMTTInKQogIAogIG1vZFRKYmV0YWRyb3BzIDwtIHZlY3RvcignbGlzdCcsIGxlbmd0aCh0ZXJtcykrMikKICBtb2RUSG9ybmRyb3BzIDwtIHZlY3RvcignbGlzdCcsIGxlbmd0aCh0ZXJtcykrMikKCiAgbmFtZXMobW9kVEpiZXRhZHJvcHMpIDwtIGMoJ2Z1bGwnLCAnLXRlbXB0cmVuZF9hYnMuc2MnLCBwYXN0ZTAoJy0nLCB0ZXJtcykpCiAgbmFtZXMobW9kVEhvcm5kcm9wcykgPC0gYygnZnVsbCcsICctdGVtcHRyZW5kX2Ficy5zYycsIHBhc3RlMCgnLScsIHRlcm1zKSkKICAKICAjIGZpdCBmdWxsIG1vZGVsIHdpdGggTUwgZm9yIG1vZGVsIGNvbXBhcmlzb24KICBtb2RUSmJldGFkcm9wc1tbMV1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSmJldGF0cmVuZCB+ICcsIHBhc3RlKHRlcm1zLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSByYW5kZWYsIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpLF0sIG1ldGhvZCA9ICdNTCcpCiAgbW9kVEhvcm5kcm9wc1tbMV1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSG9ybnRyZW5kIH4gJywgcGFzdGUodGVybXMsIGNvbGxhcHNlID0gJyArICcpKSksCiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IHJhbmRlZiwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2kyLF0sIG1ldGhvZCA9ICdNTCcpCiAgCiAgIyB3L291dCB0ZW1wdHJlbmQKICBtb2RUSmJldGFkcm9wc1tbMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSmJldGF0cmVuZCB+ICcsIHBhc3RlKGdzdWIoJ3RlbXB0cmVuZF9hYnMuc2NcXConLCAnJywgdGVybXMpLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICByYW5kb20gPSBsaXN0KFNUVURZX0lEID0gfiAxLCByYXJlZnlJRCA9IH4xKSwgd2VpZ2h0cyA9IHZhcmVmLCBkYXRhID0gdHJlbmRzW2ksXSwgbWV0aG9kID0gJ01MJykKICBtb2RUSG9ybmRyb3BzW1syXV0gPC0gbG1lKGZvcm11bGEocGFzdGUwKCdIb3JudHJlbmQgfiAnLCBwYXN0ZShnc3ViKCd0ZW1wdHJlbmRfYWJzLnNjXFwqJywgJycsIHRlcm1zKSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gbGlzdChTVFVEWV9JRCA9IH4gMSwgcmFyZWZ5SUQgPSB+MSksIHdlaWdodHMgPSB2YXJlZiwgZGF0YSA9IHRyZW5kc1tpMixdLCBtZXRob2QgPSAnTUwnKQogIAogIGZvcihqIGluIDE6bGVuZ3RoKHRlcm1zKSl7CiAgICBwcmludChqKQogICAgbW9kVEpiZXRhZHJvcHNbW2orMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSmJldGF0cmVuZCB+ICcsIHBhc3RlKHRlcm1zWy1qXSwgY29sbGFwc2UgPSAnICsgJykpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaSxdLCBtZXRob2QgPSAnTUwnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IGxtZUNvbnRybChyZXR1cm5PYmplY3QgPSBUUlVFKSkgIyByZXR1cm4gZml0dGVkIG9iamVjdCBldmVuIGlmIGEgY29udmVyZ2VuY2UgZXJyb3IKICAgIG1vZFRIb3JuZHJvcHNbW2orMl1dIDwtIGxtZShmb3JtdWxhKHBhc3RlMCgnSG9ybnRyZW5kIH4gJywgcGFzdGUodGVybXNbLWpdLCBjb2xsYXBzZSA9ICcgKyAnKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tID0gcmFuZGVmLCB3ZWlnaHRzID0gdmFyZWYsIGRhdGEgPSB0cmVuZHNbaTIsXSwgbWV0aG9kID0gJ01MJykKICB9CiAgCiAgYWljc0piZXRhIDwtIHNhcHBseShtb2RUSmJldGFkcm9wcywgQUlDKQogIGFpY3NIb3JuIDwtIHNhcHBseShtb2RUSG9ybmRyb3BzLCBBSUMpCgogIGlmKGV4aXN0cygnYWljc2Zyb21mdWxsJykpewogICAgYWljc2Zyb21mdWxsJGRBSUNfSmJldGEgPC0gYWljc0piZXRhIC0gYWljc0piZXRhWzFdCiAgICBhaWNzZnJvbWZ1bGwkZEFJQ19Ib3JuIDwtIGFpY3NIb3JuIC0gYWljc0hvcm5bMV0KICB9IGVsc2UgewogICAgYWljc2Zyb21mdWxsIDwtIGRhdGEuZnJhbWUobW9kID0gbmFtZXMoYWljcyksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZEFJQ19KYmV0YSA9IGFpY3NKYmV0YSAtIGFpY3NKYmV0YVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRBSUNfSG9ybiA8LSBhaWNzSG9ybiAtIGFpY3NIb3JuWzFdKQogIH0KICAKICB3cml0ZS5jc3YoYWljc2Zyb21mdWxsLCBmaWxlID0gJ291dHB1dC9haWNzX2Zyb21fZnVsbC5jc3YnLCByb3cubmFtZXMgPSBGQUxTRSkKfQoKYWljc2Zyb21mdWxsCmBgYAoKIyMjIyBQbG90IGRlbHRhQUlDcyBmb3IgYWxsIDMgbW9kZWxzCmBgYHtyIHBsb3QgZEFJQ3N9CiMgdHJhbnNmb3JtIGZvciBhIHBsb3QKYWljc2Zyb21mdWxsbG9uZyA8LSByZXNoYXBlKGFpY3Nmcm9tZnVsbCwgZGlyZWN0aW9uID0gJ2xvbmcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZyA9IGMoJ2RBSUNfSnR1JywgJ2RBSUNfSmJldGEnLCAnZEFJQ19Ib3JuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Lm5hbWVzID0gJ2RBSUMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR2YXIgPSAnbW9kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV2YXIgPSAndHlwZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcyA9IGMoJ0p0dScsICdKYmV0YScsICdIb3JuJykpCgp0cmFucyA9IGZ1bmN0aW9uKHgpIHNpZ24oeCkqc3FydChhYnMoeCkpCmFpY3Nmcm9tZnVsbGxvbmckZEFJQ190ciA8LSB0cmFucyhhaWNzZnJvbWZ1bGxsb25nJGRBSUMpCgojIHBsb3QKeGxpbXMgPC0gcmFuZ2UoYWljc2Zyb21mdWxsbG9uZyRkQUlDX3RyKQp4dGlja3MgPC0gYygtMTAsIDAsIDEwLCAxMDAsIDEwMDAsIDEwMDAwKQpwYXIobWFpID0gYygwLjUsIDMsIDAuMSwgMC4xKSkKd2l0aChhaWNzZnJvbWZ1bGxsb25nW2FpY3Nmcm9tZnVsbGxvbmckdHlwZSA9PSAnSnR1JyxdLCBwbG90KGRBSUNfdHIsIG5yb3coYWljc2Zyb21mdWxsKToxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSAnbGlnaHQgZ3JleScsIHhsaW0gPSB4bGltcywgeWF4dCA9ICduJywgeWxhYiA9ICcnLCB4YXh0ID0gJ24nKSkKd2l0aChhaWNzZnJvbWZ1bGxsb25nW2FpY3Nmcm9tZnVsbGxvbmckdHlwZSA9PSAnSmJldGEnLF0sIHBvaW50cyhkQUlDX3RyLCBucm93KGFpY3Nmcm9tZnVsbCk6MSAtIDAuMSwgY29sID0gJ2RhcmsgZ3JleScpKQp3aXRoKGFpY3Nmcm9tZnVsbGxvbmdbYWljc2Zyb21mdWxsbG9uZyR0eXBlID09ICdIb3JuJyxdLCBwb2ludHMoZEFJQ190ciwgbnJvdyhhaWNzZnJvbWZ1bGwpOjEgLSAwLjIsIGNvbCA9ICdibGFjaycpKQpheGlzKDIsIGF0ID0gbnJvdyhhaWNzZnJvbWZ1bGwpOjEsIGxhYmVscyA9IGFpY3Nmcm9tZnVsbCRtb2QsIGxhcyA9IDEsIGNleC5heGlzID0gMC43KQpheGlzKDEsIGF0ID0gdHJhbnMoeHRpY2tzKSwgbGFiZWxzID0geHRpY2tzLCBjZXguYXhpcyA9IDAuNSkKYWJsaW5lKHYgPSAwLCBsdHkgPTIsIGNvbCA9ICdncmV5JykKYGBgCkxpZ2h0IGdyZXkgaXMgZm9yIEphY2NhcmQgdHVybm92ZXIsIGRhcmsgZ3JleSBpcyBmb3IgSmFjY2FyZCB0b3RhbCwgYmxhY2sgaXMgZm9yIE1vcmlzaXRhLUhvcm4KCgojIyMgUGxvdCBpbnRlcmFjdGlvbiBjb2VmZmljaWVudHMgZnJvbSBhbGwgZnVsbCBtb2RlbHMKYGBge3IgcGxvdCBjb2VmcyBmb3IgYWxsIG1vZGVscywgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9Niwgb3V0LmhlaWdodD01LCBvdXQud2lkdGg9NiwgZmlnLnJldGluYT0yfQojIGZpZy53aWR0aCA9IDMsIGZpZy5oZWlnaHQgPSA1LCBvdXQuaGVpZ2h0PTIuNSwgb3V0LndpZHRoPTMsIGZpZy5yZXRpbmEgPTMgZm9yIG1hY2Jvb2sgc2NyZWVuCiMgZG91YmxlIHRoYXQgZm9yIGV4dGVybmFsIG1vbml0b3IKY29lZnMgPC0gYXMuZGF0YS50YWJsZShzdW1tYXJ5KG1vZFRmdWxsMSkkdFRhYmxlKQpjb2VmczIgPC0gYXMuZGF0YS50YWJsZShzdW1tYXJ5KG1vZFRmdWxsSmJldGEpJHRUYWJsZSkKY29lZnMzIDwtIGFzLmRhdGEudGFibGUoc3VtbWFyeShtb2RUZnVsbEhvcm4pJHRUYWJsZSkKY29lZnM0IDwtIGFzLmRhdGEudGFibGUoc3VtbWFyeShtb2RUZnVsbHJlbTApJHRUYWJsZSkKY29lZnM1IDwtIGFzLmRhdGEudGFibGUoc3VtbWFyeShtb2RUZnVsbEpiZXRhcmVtMCkkdFRhYmxlKQpjb2VmczYgPC0gYXMuZGF0YS50YWJsZShzdW1tYXJ5KG1vZFRmdWxsSG9ybnJlbTApJHRUYWJsZSkKCmNvZWZzJG1vZCA8LSAnSnR1Jwpjb2VmczIkbW9kIDwtICdKYmV0YScKY29lZnMzJG1vZCA8LSAnSG9ybicKY29lZnM0JG1vZCA8LSAnSnR1IHJlbTAnCmNvZWZzNSRtb2QgPC0gJ0piZXRhIHJlbTAnCmNvZWZzNiRtb2QgPC0gJ0hvcm4gcmVtMCcKCmNvZWZzJHZhciA8LSByb3duYW1lcyhzdW1tYXJ5KG1vZFRmdWxsMSkkdFRhYmxlKQpjb2VmczIkdmFyIDwtIHJvd25hbWVzKHN1bW1hcnkobW9kVGZ1bGxKYmV0YSkkdFRhYmxlKQpjb2VmczMkdmFyIDwtIHJvd25hbWVzKHN1bW1hcnkobW9kVGZ1bGxIb3JuKSR0VGFibGUpCmNvZWZzNCR2YXIgPC0gcm93bmFtZXMoc3VtbWFyeShtb2RUZnVsbHJlbTApJHRUYWJsZSkKY29lZnM1JHZhciA8LSByb3duYW1lcyhzdW1tYXJ5KG1vZFRmdWxsSmJldGFyZW0wKSR0VGFibGUpCmNvZWZzNiR2YXIgPC0gcm93bmFtZXMoc3VtbWFyeShtb2RUZnVsbEhvcm5yZW0wKSR0VGFibGUpCgojIGV4dHJhY3QgdGVtcGVyYXR1cmUgZWZmZWN0cyBhbmQgYmluZCBtb2RlbCBjb2VmcyB0b2dldGhlcgpjb2xzIDwtIGMoJ3ZhcicsICdWYWx1ZScsICdTdGQuRXJyb3InLCAnbW9kJykKCmFsbGNvZWZzZnVsbCA8LSByYmluZChjb2Vmc1tncmVwKCd0ZW1wdHJlbmR8UkVBTE0nLCB2YXIpLCAuLmNvbHNdLCAKICAgICAgICAgICAgICAgICAgICAgIGNvZWZzMltncmVwKCd0ZW1wdHJlbmR8UkVBTE0nLCB2YXIpLCAuLmNvbHNdLCAKICAgICAgICAgICAgICAgICAgICAgIGNvZWZzM1tncmVwKCd0ZW1wdHJlbmR8UkVBTE0nLCB2YXIpLCAuLmNvbHNdLAogICAgICAgICAgICAgICAgICAgICAgY29lZnM0W2dyZXAoJ3RlbXB0cmVuZHxSRUFMTScsIHZhciksIC4uY29sc10sCiAgICAgICAgICAgICAgICAgICAgICBjb2VmczVbZ3JlcCgndGVtcHRyZW5kfFJFQUxNJywgdmFyKSwgLi5jb2xzXSwKICAgICAgICAgICAgICAgICAgICAgIGNvZWZzNltncmVwKCd0ZW1wdHJlbmR8UkVBTE0nLCB2YXIpLCAuLmNvbHNdKQphbGxjb2Vmc2Z1bGwkdmFyW2FsbGNvZWZzZnVsbCR2YXIgPT0gJ3RlbXB0cmVuZF9hYnMuc2MnXSA8LSAndGVtcHRyZW5kX2Ficy5zYzpSRUFMTUZyZXNod2F0ZXInCgojIGFkZCBhdmVyYWdlIHRlbXBlcmF0dXJlIGVmZmVjdCAoYWNyb3NzIHJlYWxtcykgdG8gcmVhbG0tc3BlY2lmaWMgdGVtcGVyYXR1cmUgZWZmZWN0cwptZWFudGVtcGVmZmVjdCA8LSBhbGxjb2Vmc2Z1bGxbdmFyID09ICd0ZW1wdHJlbmRfYWJzLnNjOlJFQUxNRnJlc2h3YXRlcicsIG1lYW4oVmFsdWUpLCBieSA9IG1vZF0kVjEKYWxsY29lZnNmdWxsW3ZhciA9PSAndGVtcHRyZW5kX2Ficy5zYzpSRUFMTU1hcmluZScsIFZhbHVlIDo9IFZhbHVlICsgbWVhbnRlbXBlZmZlY3RdCmFsbGNvZWZzZnVsbFt2YXIgPT0gJ3RlbXB0cmVuZF9hYnMuc2M6UkVBTE1UZXJyZXN0cmlhbCcsIFZhbHVlIDo9IFZhbHVlICsgbWVhbnRlbXBlZmZlY3RdCgojIHJlbW92ZSBub24tdGVtcGVyYXR1cmUgZWZmZWN0cwphbGxjb2Vmc2Z1bGwgPC0gYWxsY29lZnNmdWxsW2dyZXBsKCc6JywgYWxsY29lZnNmdWxsJHZhcikgJiBncmVwbCgndGVtcHRyZW5kJywgYWxsY29lZnNmdWxsJHZhciksIF0KCiMgYWRkIGluZm8gZm9yIHBsb3R0aW5nCmFsbGNvZWZzZnVsbCRsQ0kgPC0gYWxsY29lZnNmdWxsJFZhbHVlIC0gYWxsY29lZnNmdWxsJFN0ZC5FcnJvciAjIGxvd2VyIGNvbmZpZGVuY2UgaW50ZXJ2YWwKYWxsY29lZnNmdWxsJHVDSSA8LSBhbGxjb2Vmc2Z1bGwkVmFsdWUgKyBhbGxjb2Vmc2Z1bGwkU3RkLkVycm9yCm52YXIgPC0gbnJvdyhhbGxjb2Vmc2Z1bGwpLzMKYWxsY29lZnNmdWxsJHkgPC0gMTpudmFyICsgcmVwKGMoMCwgMC4xLCAwLjIpLCBjKG52YXIsIG52YXIsIG52YXIpKSAjIHktdmFsdWVzCgojIGNsZWFuIHVwIHNvbWUgdmFyaWFibGUgbmFtZXMgZm9yIG5pY2VyIHBsb3R0aW5nCmFsbGNvZWZzZnVsbCR2YXJuYW1lIDwtIGdzdWIoJ3RlbXB0cmVuZF9hYnMuc2M6fHRlbXB0cmVuZC5zYzonLCAnJywgYWxsY29lZnNmdWxsJHZhcikKYWxsY29lZnNmdWxsJHZhcm5hbWUgPC0gZ3N1YignUkVBTE18UkVBTE0yJywgJycsIGFsbGNvZWZzZnVsbCR2YXJuYW1lKQphbGxjb2Vmc2Z1bGwkdmFybmFtZSA8LSBnc3ViKCcuc2MnLCAnJywgYWxsY29lZnNmdWxsJHZhcm5hbWUpCmFsbGNvZWZzZnVsbCR2YXJuYW1lIDwtIGdzdWIoJ19ib3dsZXInLCAnJywgYWxsY29lZnNmdWxsJHZhcm5hbWUpCmFsbGNvZWZzZnVsbCR2YXJuYW1lIDwtIGdzdWIoJ3RzaWduMScsICd3YXJtaW5nJywgYWxsY29lZnNmdWxsJHZhcm5hbWUpCmFsbGNvZWZzZnVsbCR2YXJuYW1lIDwtIGdzdWIoJ3RzaWduLTEnLCAnY29vbGluZycsIGFsbGNvZWZzZnVsbCR2YXJuYW1lKQoKIyBzZXQgeC1heGVzCnhsaW1zMSA8LSBjKC0wLjAxLCAwLjExKSAjIGZvciByZWFsbXMKeGxpbXMyIDwtIGMoLTAuMDUsIDAuMDUpICMgZm9yIHRyYWl0cwp4bGltczMgPC0gYygtMC4wMSwgMC4wMikgIyBmb3IgZW52aXJvbm1lbnQKeGxpbXM0IDwtIGMoLTAuMDE2LCAwLjAxKSAjIGZvciBjb21tdW5pdHkKeGxpbXM1IDwtIGMoLTAuMDA2LCAwLjAwNSkgIyBmb3IgaHVtYW4KCmRkZyA8LSAwLjUgIyB2ZXJ0aWNhbCBkb2RnZSBmb3IgZWFjaCBtb2RlbAoKIyBjaG9vc2Ugd2hpY2ggdmFyaWFibGVzIGFyZSBpbiB3aGljaCBncmFwaApzZXQxIDwtIGMoJ1RlcnJlc3RyaWFsJywgJ01hcmluZScsICdGcmVzaHdhdGVyJykKc2V0MiA8LSBjKCdtYXNzJywgJ3NwZWVkJywgJ2xpZmVzcGFuJywgJ2NvbnN1bWVyZnJhYycsICdlbmRvdGhlcm1mcmFjJywgJ3RlbXBhdmVfbWV0YWInKQpzZXQzIDwtIGMoJ3NlYXMnLCAnbWljcm9jbGltJywgJ3RlbXBhdmUnKQpzZXQ0IDwtIGMoJ25wcCcsICduc3BwJywgJ3RzaWduLTE6dGhlcm1hbF9iaWFzJywgJ3RzaWduMTp0aGVybWFsX2JpYXMnKQpzZXQ1IDwtIGMoJ2h1bWFuOlRlcnJGcmVzaCcsICdodW1hbjpNYXJpbmUnKQoKcDEgPC0gZ2dwbG90KHN1YnNldChhbGxjb2Vmc2Z1bGwsIHZhcm5hbWUgJWluJSBzZXQxKSwgCiAgICAgICAgICAgICAgICAgICAgYWVzKHZhcm5hbWUsIFZhbHVlLCBncm91cCA9IG1vZCwgY29sb3IgPSBtb2QpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAnZGFzaGVkJywgY29sb3IgPSAnbGlnaHQgZ3JleScpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbENJLCB5bWF4ID0gdUNJKSwgd2lkdGggPSAwLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKGRkZykpICsgCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKGRkZykpICsgCiAgbGFicyh5ID0gJ1RlbXBlcmF0dXJlIGNoYW5nZSBlZmZlY3QnLCB4ID0gJycsIHRhZyA9ICdBJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gJ0RhcmsyJykgKyAKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBsZWdlbmQucG9zaXRpb249J25vbmUnLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT03KSwKICAgICAgICBheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTcpKSArIAogIGNvb3JkX2ZsaXAoeWxpbSA9IHhsaW1zMSkKCnAyIDwtIGdncGxvdChzdWJzZXQoYWxsY29lZnNmdWxsLCB2YXJuYW1lICVpbiUgc2V0MiksIAogICAgICAgICAgICAgICAgICAgIGFlcyh2YXJuYW1lLCBWYWx1ZSwgZ3JvdXAgPSBtb2QsIGNvbG9yID0gbW9kKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gJ2Rhc2hlZCcsIGNvbG9yID0gJ2xpZ2h0IGdyZXknKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGxDSSwgeW1heCA9IHVDSSksIHdpZHRoID0gMCwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZShkZGcpKSArIAogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZShkZGcpKSArIAogIGxhYnMoeSA9ICdJbnRlcmFjdGlvbiB3aXRoIHRlbXBlcmF0dXJlIGNoYW5nZSBlZmZlY3QnLCB4ID0gJycsIHRhZyA9ICdCJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gJ0RhcmsyJykgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0nbm9uZScsCiAgICAgICAgYXhpcy50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTcpLAogICAgICAgIGF4aXMudGl0bGU9ZWxlbWVudF90ZXh0KHNpemU9NykpICsgCiAgY29vcmRfZmxpcCh5bGltID0geGxpbXMyKQoKcDMgPC0gZ2dwbG90KHN1YnNldChhbGxjb2Vmc2Z1bGwsIHZhcm5hbWUgJWluJSBzZXQzKSwgCiAgICAgICAgICAgICAgICAgICAgYWVzKHZhcm5hbWUsIFZhbHVlLCBncm91cCA9IG1vZCwgY29sb3IgPSBtb2QpKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAnZGFzaGVkJywgY29sb3IgPSAnbGlnaHQgZ3JleScpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbENJLCB5bWF4ID0gdUNJKSwgd2lkdGggPSAwLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKGRkZykpICsgCiAgZ2VvbV9wb2ludChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKGRkZykpICsgCiAgbGFicyh5ID0gJ0ludGVyYWN0aW9uIHdpdGggdGVtcGVyYXR1cmUgY2hhbmdlIGVmZmVjdCcsIHggPSAnJywgdGFnID0gJ0MnKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAnRGFyazInKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uPSdub25lJywKICAgICAgICBheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9NyksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT03KSkgKyAKICBjb29yZF9mbGlwKHlsaW0gPSB4bGltczMpCgpwNCA8LSBnZ3Bsb3Qoc3Vic2V0KGFsbGNvZWZzZnVsbCwgdmFybmFtZSAlaW4lIHNldDQpLCAKICAgICAgICAgICAgICAgICAgICBhZXModmFybmFtZSwgVmFsdWUsIGdyb3VwID0gbW9kLCBjb2xvciA9IG1vZCkpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICdkYXNoZWQnLCBjb2xvciA9ICdsaWdodCBncmV5JykgKwogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBsQ0ksIHltYXggPSB1Q0kpLCB3aWR0aCA9IDAsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoZGRnKSkgKyAKICBnZW9tX3BvaW50KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoZGRnKSkgKyAKICBsYWJzKHkgPSAnSW50ZXJhY3Rpb24gd2l0aCB0ZW1wZXJhdHVyZSBjaGFuZ2UgZWZmZWN0JywgeCA9ICcnLCB0YWcgPSAnRCcpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICdEYXJrMicpICsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBsZWdlbmQucG9zaXRpb249J25vbmUnLAogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X3RleHQoc2l6ZT03KSwKICAgICAgICBheGlzLnRpdGxlPWVsZW1lbnRfdGV4dChzaXplPTcpKSArIAogIGNvb3JkX2ZsaXAoeWxpbSA9IHhsaW1zNCkKCnA1IDwtIGdncGxvdChzdWJzZXQoYWxsY29lZnNmdWxsLCB2YXJuYW1lICVpbiUgc2V0NSksIAogICAgICAgICAgICAgICAgICAgIGFlcyh2YXJuYW1lLCBWYWx1ZSwgZ3JvdXAgPSBtb2QsIGNvbG9yID0gbW9kKSkgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGxpbmV0eXBlID0gJ2Rhc2hlZCcsIGNvbG9yID0gJ2xpZ2h0IGdyZXknKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGxDSSwgeW1heCA9IHVDSSksIHdpZHRoID0gMCwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZShkZGcpKSArIAogIGdlb21fcG9pbnQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZShkZGcpKSArIAogIGxhYnMoeSA9ICdJbnRlcmFjdGlvbiB3aXRoIHRlbXBlcmF0dXJlIGNoYW5nZSBlZmZlY3QnLCB4ID0gJycsIHRhZyA9ICdFJykgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gJ0RhcmsyJykgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbj0nYm90dG9tJywKICAgICAgICBheGlzLnRleHQ9ZWxlbWVudF90ZXh0KHNpemU9NyksCiAgICAgICAgYXhpcy50aXRsZT1lbGVtZW50X3RleHQoc2l6ZT03KSkgKyAKICBjb29yZF9mbGlwKHlsaW0gPSB4bGltczUpCgpncmlkLmFycmFuZ2UocDEsIHAyLCBwMywgcDQsIHA1LCBuY29sID0gMiwgbGF5b3V0X21hdHJpeCA9IHJiaW5kKGMoMSwyKSwgYygzLDQpLCBjKDUsIE5BKSkpCgoKYGBgCgo=